流程控制
與其他語言類似,略。
條件測試
命令test
或[
可以測試乙個條件是否成立,如果測試結果為真,則該命令的exit status
為0,如果測試結果為假,則命令的exit status
為1。
傳給命令的各引數之間應該用空格隔開,比如,$var、-gt、3、]是[命令的四個引數,它們之間必須用空格隔開。常見的測試命令如下表所示:
字串比較
結果string1 = string2
如果兩個字串相同,結果就為真
string1 != string2
如果兩個字串不同,結果就為真
-n string
如果字串不為空,則結果為真
-z string
如果字串為乙個空串(null),則結果為真
算術比較
結果expression1 -eq expression2
如果兩個表示式相等,則結果為真
expression1 -ne expression2
如果兩個表示式不等,則結果為真
expression1 -gt expression2
如果expression1大於expression2,則為真
expression1 -ge expression2
如果expression1大於等於expression2,則為真
expression1 -lt expression2
如果expression1小於expression2,則為真
expression1 -le expression2
如果expression1小於等於expression2,則為真
!expression
表示式為假,則結果就為真;反之亦然
檔案條件測試
結果-d file
如果檔案是乙個目錄,則為真
-f file
如果檔案是乙個普通檔案,則為真;也可以用來測試檔案是否存在
-r file
如果檔案可讀,則結果為真
-s file
如果檔案大小不為0,則結果為真
-w file
如果檔案可寫,則結果為真
-x file
如果檔案可執行,則結果為真
函式shell函式沒有引數列表並不表示不能傳引數,事實上,函式就像是迷你指令碼,呼叫函式時可以傳任意個引數,在函式內同樣是用$0、$1、$2
等變數來提取引數,函式中的位置引數相當於函式的區域性變數,改變這些變數並不會影響函式外面的$0、$1、$2
等變數。函式中可以用return
命令返回,如果return
後面跟乙個數字則表示函式的exit status
。
**示例:
#!/bin/bash
main()
#列印大於3的引數,只是示例,沒有進行引數合法性檢查
greate_num()
main $@
greate_num 1 2 3 4 5 6
echo 'greate_num result='$?
輸出結果:
sl@li:~/works/study/shell$ ./script.sh 1 2
main args num=212
---------45
6greate_num result=3
位置引數和特殊變數
有很多特殊變數是被shell自動賦值的,如下表所示:
特殊變數
描述$0
當前程式的名稱,相當於c語言main函式的argv[0]
$1、$2…
這些稱為位置引數(positional parameter),相當於c語言main函式的argv[1]、argv[2]…
$#引數個數,相當於c語言main函式的argc - 1,注意這裡的#後面不表示注釋
$@表示引數列表"$1" 「$2」 …,例如可以用在for迴圈中的in後面。
$?上一條命令的exit status
$$當前shell的程序號
**示例見上面函式部分的的示例**。
shell指令碼的除錯方法
shell提供了一些用於除錯指令碼的選項,如下所示:
選項描述
-n讀一遍指令碼中的命令但不執行,用於檢查指令碼中的語法錯誤
-v一邊執行指令碼,一邊將執行過的指令碼命令列印到標準錯誤輸出
-x提供跟蹤執行資訊,將執行的每一條命令和結果依次列印出來
使用這些選項有三種方法:
在命令列提供引數(sh -x ./script.sh
)
在指令碼開頭提供引數
#! /bin/sh -x
在指令碼中用set
命令啟用或禁用引數
#! /bin/sh
if [ -z "$1" ]; then
set -x
echo "error: insufficient args."
exit 1
set +x
fi
set -x
和set +x
分別表示啟用和禁用-x
引數,這樣可以只對指令碼中的某一段進行跟蹤除錯。
linux shell簡明教程(二)
linux shell 程式設計
bin bash comments your commands go here 首行中的符號 告訴系統其後路徑所指定的程式bash即是解釋此指令碼檔案的shell程式。除第一行外,以 開頭的行就是注釋行,直到此行的結束。如果一行未完成,可以在行尾加上 這個符號表明下一行與此行會合併為同一行。有環境變...
linux shell 程式設計
1 程式設計入門 shell的簡介。從程式設計師的角度來看,shell本身是一種用c語言編寫的程式,從使用者的角度來看,shell是使用者與linux作業系統溝通的橋梁。使用者既可以輸入命令執行,又可以利用 shell指令碼程式設計,完成更加複雜的操作。在linux gui日益完善的今天,在系統管理...
Linux Shell 程式設計
檔案描述 shell 代號 dev stdin 標準輸入,一般指的是鍵盤輸入 dev stdout 標準輸出,一般指終端顯示器 dev stderr 標準錯誤,一般指終端顯示器 l輸出重定向 l輸入重定向 l追加重定向 l錯誤重定向 2 l輸出和錯誤同時重定向 應用例子 1.將 ls的結果輸出到檔案...