1. 程式人生 > >Linux編程 22 shell編程(輸出和輸入重定向,管道,數學運算命令,退出腳本狀態碼)

Linux編程 22 shell編程(輸出和輸入重定向,管道,數學運算命令,退出腳本狀態碼)

tab test $? per width 可能 註意 ble 保存

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 。
    技術分享圖片

  

Linux編程 22 shell編程(輸出和輸入重定向,管道,數學運算命令,退出腳本狀態碼)