1. 輸出重定向 最基本的重定向是將命令的輸出發送到一個文件中。在bash shell中用大於號(>) ,格式如下:command > inputfile。例如:將date命令的輸出內容,保存到指定的輸出文件中。 如果文件已存在,重定向操作符會用新的文件數據覆蓋已有文件。這種情況下可以用雙大於號(> ...
1. 輸出重定向
最基本的重定向是將命令的輸出發送到一個文件中。在bash shell中用大於號(>) ,格式如下:command > inputfile。例如:將date命令的輸出內容,保存到指定的輸出文件中。
如果文件已存在,重定向操作符會用新的文件數據覆蓋已有文件。這種情況下可以用雙大於號(>>) 來追加數據。如下圖所示:
2. 輸入重定向
輸入重定向和輸出重定向正好相反。輸入重定向是將文件的內容重定向到命令,而非將命令的輸出重定向到文件。 輸入重定向符號是小於號(<),格式如下:Command < inputfile。下麵是test1文件和wc命令一起使用輸入重定向的例子。 wc 命令可以對文件內容進行計數包括文本的行數、文本的詞數、文本的位元組數。
另外一種輸入重定向的方法,稱內聯輸入重定向(符號是 <<)。這種方法無需使用文件進行重定向,只需要在命令行中指定用於輸入重定向的數據就可以了。計數包括文本的行數、文本的詞數、文本的位元組數。
3. 管道
管道符號是單個豎線( | ) ,管道被放在命令之間,將一個命令的輸出重定向到另一個命令中。格式: command1 | command2 。Linux系統會同時運行這兩個命令,在系統內部將它們連接起來。在第一個文件產生輸出的同時,輸出會被立即送給第二個命令,數據不會用到任何中間文件或緩衝區。例如查找yum安裝的所有包,並使用管道立即送給第二個命令 grep 來過濾查詢字元中含有mysql的。
下麵是使用了二個管道, 排序,分頁查看。並將結合重定向來將輸出保存到yum.list文件中,下圖是通過cat yum.list來查看文件內容。
[hsr@xuegod64 ~]$ yum list | sort | more [hsr@xuegod64 ~]$ yum list | sort > yum.list
4. 數學運算命令
在Bourne shell 中使用expr命令來進行數字運算。在bash shell 中也相容,但它提供了更簡單的方法來執行數學表達式, 在bash中, 將一個數學變數結果賦給某個變數時,可以用美元符和方括弧( $[operation] ) 將數學表達式圍起來(註意運算只支持整數)。
同樣也適合於shell腳本中。
5. 浮點解決方案
有幾種方法剋服bash中數學運算的整數限制,最常見的方案是用內建的bash計算器叫作bc。
5.1 bc的基本用法
bash計算器實際上是一種編程語言,它允許在命令行輸入浮點表達式,然後解釋並計算該表達式,返回結果。Bash 計算器能夠識別: 數字,變數,註釋,表達式,編程語句(if -then)。
用法是在命令行輸入bc,接著輸入要進行運算的數字表達式,按回車出結果,如下圖所示:
對於保留小數位,使用scale指定要保留的小數位,下麵先指定保留4位小數。
下麵使用 bc –q選項不顯示bash計算器的歡迎信息。使用變數來看看,如下圖:
5.2 在腳本中使用bc
使用之前學過的命令替換,可以用命令替換運行bc命令,並將輸出賦給一個變數。格式如下: variable=$(echo “options; expression” | bc) options是允許你設置變數,如果不止一個,用分號分開。 expression定義了通過bc執行的數學表達式。
下麵是將scale變數設置成四位小數,併在expression部份指定了特定的運算。
下麵是在腳本中使用變數來運算浮點數
下麵另一種方法是通過內聯重定向,格式是 : variable=$(bc << EOF Options Statements Expressions EOF)
6. 退出腳本
6.1 查看退出狀態碼
shell中運行的每個命令都有退出狀態碼(exit status)告訴shell它已經運行完畢。退出狀態碼是一個0~255的整數值。在命令結束時由命令傳給shell,可以捕獲這個值併在腳本中使用.
Linux提供了一個專門的變數$? 來保存上個已執行命令退出狀態碼。這個類似於一種開發中用斷點診斷方式。 如果命令成功結束退出狀態碼是0,如果命令有錯誤,退出狀態就是一個正整數。如下圖所示:
下麵是linux退出狀態碼列表
狀態碼 |
描述 |
0 |
命令成功結束 |
1 |
一般性未知錯誤 |
2 |
不適合的shell命令 |
126 |
命令不可執行 |
127 |
沒有找到命令 |
130 |
通過ctrl + c 終止的命令 |
255 |
正常範圍之外的退出狀態碼 |
需要註意的是退出狀態碼126 出現,有可能是用戶沒有執行命令的正確許可權. 另一個退出狀態碼 1的出現,有可能是命令的參數不對。
6.2 exit
預設情況下,shell腳本會以腳本中最後一個命令的退出狀態碼退出。使用exit 命令可以改變這種預設行為,返回自己的的退出狀態碼,exit 命令允許腳本結束時指定一個退出狀態碼,但最大狀態碼只能是255。
下麵在腳本最後自定義退出狀態碼10, 執行腳本後,使用echo $? 輸出了狀態碼10 。