shell之什么时候使用shell以及最简单的shell程序
生活随笔
收集整理的這篇文章主要介紹了
shell之什么时候使用shell以及最简单的shell程序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
因為Shell似乎是各UNIX系統(tǒng)之間通用的功能,并且經(jīng)過了POSIX的標(biāo)準(zhǔn)化。因此,Shell腳本只要“用心寫”一次,即可應(yīng)用到很多系統(tǒng)上。因此,之所以要使用Shell腳本是基于:
但是,考慮到Shell腳本的命令限制和效率問題,下列情況一般不使用Shell:資源密集型的任務(wù),尤其在需要考慮效率時(比如,排序,hash等等)。 需要處理大任務(wù)的數(shù)學(xué)操作,尤其是浮點運算,精確運算,或者復(fù)雜的算術(shù)運算(這種情況一般使用C++或FORTRAN 來處理)。 有跨平臺(操作系統(tǒng))移植需求(一般使用C 或Java)。 復(fù)雜的應(yīng)用,在必須使用結(jié)構(gòu)化編程的時候(需要變量的類型檢查,函數(shù)原型,等等)。 對于影響系統(tǒng)全局性的關(guān)鍵任務(wù)應(yīng)用。 對于安全有很高要求的任務(wù),比如你需要一個健壯的系統(tǒng)來防止入侵、破解、惡意破壞等等。 項目由連串的依賴的各個部分組成。 需要大規(guī)模的文件操作。 需要多維數(shù)組的支持。 需要數(shù)據(jù)結(jié)構(gòu)的支持,比如鏈表或數(shù)等數(shù)據(jù)結(jié)構(gòu)。 需要產(chǎn)生或操作圖形化界面 GUI。 需要直接操作系統(tǒng)硬件。 需要 I/O 或socket 接口。 需要使用庫或者遺留下來的老代碼的接口。 私人的、閉源的應(yīng)用(shell 腳本把代碼就放在文本文件中,全世界都能看到)。
#!/bin/bash echo "Hello World !"
“#!” 是一個約定的標(biāo)記,它告訴系統(tǒng)這個腳本需要什么解釋器來執(zhí)行,即使用哪一種Shell。echo命令用于向窗口輸出文本。
運行Shell腳本有兩種方法。
通過這種方式運行bash腳本,第一行一定要寫對,好讓系統(tǒng)查找到正確的解釋器。
這里的"系統(tǒng)",其實就是shell這個應(yīng)用程序(想象一下Windows Explorer),但我故意寫成系統(tǒng),是方便理解,既然這個系統(tǒng)就是指shell,那么一個使用/bin/sh作為解釋器的腳本是不是可以省去第一行呢?是的。
再看一個例子。下面的腳本使用? read ?命令從 stdin 獲取輸入并賦值給?PERSON 變量,最后在 stdout 上輸出:#!/bin/bash # Author : mozhiyan # Copyright (c) http://see.xidian.edu.cn/cpp/linux/ # Script follows here: echo "What is your name?" read PERSON echo "Hello, $PERSON"
運行腳本:
chmod +x ./test.sh
$./test.sh
What is your name?
mozhiyan
Hello, mozhiyan
$
- 簡單性:Shell是一個高級語言;通過它,你可以簡潔地表達(dá)復(fù)雜的操作。
- 可移植性:使用POSIX所定義的功能,可以做到腳本無須修改就可在不同的系統(tǒng)上執(zhí)行。
- 開發(fā)容易:可以在短時間內(nèi)完成一個功能強大又妤用的腳本。
但是,考慮到Shell腳本的命令限制和效率問題,下列情況一般不使用Shell:
如果你的應(yīng)用符合上邊的任意一條,那么就考慮一下更強大的語言吧——或許是Perl、Tcl、Python、Ruby——或者是更高層次的編譯語言比如C/C++,或者是Java。即使如此,你會發(fā)現(xiàn),使用shell來原型開發(fā)你的應(yīng)用,在開發(fā)步驟中也是非常有用的。
打開文本編輯器,新建一個文件,擴(kuò)展名為sh(sh代表shell),擴(kuò)展名并不影響腳本執(zhí)行,見名知意就好,如果你用php寫shell 腳本,擴(kuò)展名就用php好了。
輸入一些代碼:
運行Shell腳本有兩種方法。
作為可執(zhí)行程序
將上面的代碼保存為test.sh,并 cd 到相應(yīng)目錄: chmod +x ./test.sh #使腳本具有執(zhí)行權(quán)限 ./test.sh #執(zhí)行腳本 注意,一定要寫成./test.sh,而不是test.sh。 運行其它二進(jìn)制的程序也一樣,直接寫test.sh,linux系統(tǒng)會去PATH里尋找有沒有叫test.sh的,而只有/bin, /sbin, /usr/bin,/usr/sbin等在PATH里,你的當(dāng)前目錄通常不在PATH里,所以寫成test.sh是會找不到命令的,要用./test.sh告訴系統(tǒng)說,就在當(dāng)前目錄找。通過這種方式運行bash腳本,第一行一定要寫對,好讓系統(tǒng)查找到正確的解釋器。
這里的"系統(tǒng)",其實就是shell這個應(yīng)用程序(想象一下Windows Explorer),但我故意寫成系統(tǒng),是方便理解,既然這個系統(tǒng)就是指shell,那么一個使用/bin/sh作為解釋器的腳本是不是可以省去第一行呢?是的。
作為解釋器參數(shù)
這種運行方式是,直接運行解釋器,其參數(shù)就是shell腳本的文件名,如: /bin/sh test.sh /bin/php test.php 這種方式運行的腳本,不需要在第一行指定解釋器信息,寫了也沒用。再看一個例子。下面的腳本使用? read ?命令從 stdin 獲取輸入并賦值給?PERSON 變量,最后在 stdout 上輸出:
總結(jié)
以上是生活随笔為你收集整理的shell之什么时候使用shell以及最简单的shell程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux之dd命令详解
- 下一篇: 不用变量交换2个值