shell是使用者與linux系統間介面的程式,它允許使用者向作業系統輸入需要執行的命令,許多強大的功能都能通過shell實現
1、重新導向
檔案描述符:0 為一個程式的標準輸入、1為標準輸出、2為標準錯誤輸出
使用 > file.txt 可以將程式標準輸出重新導向到一個檔案,預設情況下會將該檔案的內容覆蓋
>>file.txt 則將程式標準輸出追加到file.txt檔案中
如果想對標準錯誤輸出進行重新導向,則需要把想要重新導向的檔案描述符編號加在 >操作符前面
$kill -HUP 1234 >killout.txt 2>killerr.txt //將標準輸出和標準錯誤輸出分別重新導向到不同檔案中
$kill -l 1234 >killouterr.txt 2>&1 //將標準輸出和標準錯誤輸出都重新導向到同一個檔案中
$kill -l 1234 >/dev/null 2>&1 //將。。。。重新導向到資源回收筒(丟棄輸出資訊)
同理,輸入也可以重新導向
$more <killout.txt
2、摘要
linux很少利用副檔名來決定檔案的類型
3 、 shell文法:
變數:字串、數字、環境和參數
條件:shell中的布爾值
程式控制:if ,elif , for ,while ,case
命令列表
函數
shell內建命令
擷取命令的執行結果
here文檔
3.1 變數
在shell中可以通過在變數名前加$符號來訪問它的內容
$value="Yes Dear" //如果字串裡包含空格,就必須用引號把他們括起來,此外,等號兩端不能有空格
$read value //使用read命令將使用者的輸入賦值給一個變數
一般情況下指令檔中的參數以空白字元分隔(空格,定位字元或分行符號),如果要在一個參數中包含一個或多個空白字元,那麼就必須給參數加上引號。
$ myvar="hi there"
>echo $myvar
>echo "$myvar" //雙引號,變數會被替換
>echo '$myvar' //單引號,變數不被替換
>echo \$myvar // 使用\ 取消$符號的特殊意義
hi there
hi there
$myvar
$myvar
環境變數
$IFS //輸入欄位分隔字元,當shell讀取輸入的時候,它給出用來分隔單詞的一組字元,通常是空格、定位字元和分行符號
$0 //shell指令碼的名字
$# //傳遞給指令碼的參數個數
Conditions
[ 與條件之間應當有空格(而給變數賦值的時候。。。)
if [ -f fred.c ]; then
set-gid 和set-uid 標誌對shell指令碼程式不起作用,它們只對可執行檔二進位檔案有用
shell在預設情況下認為所有的變數包含的都是字串,foo=43 此處,43當成了字串
until語句
until conditions //執行下面的statements 知道conditions成立
do
statements
done
case 語句 //case將使用第一個匹配的模式,即使後面的模式有更精確的匹配,case不去尋找首選
case variable in
pattern [ | pattern] ...) statements;; //注意是雙分號結尾
pattern [ | pattern] ...) statements;;
...
esac
注意 * 萬用字元在引號中不起作用
AND列表
statement1 && statement2 && statement3 && ... //下一個statement只有在前面所有的statement都執行成功的情況下 //才執行,&&的作用是檢查前一條命令的傳回值
注意,在一個指令碼程式中執行另外一個指令碼程式要比執行一個函數慢得多