今天練習寫了一下shell script發現判斷句和數值運算實在是不太會用,整理一下在網誌中
1. shell script的判斷句:
在shell中做邏輯的判斷可以用
注意:使用中括弧作為判斷的時候,變數兩邊需要留空白
ex:[(空白)$var1(空白)==(空白)$var2(空白)],否則回被判斷為command造成錯誤
a. 與檔案有關的測試標誌
測試標誌 | 意義 |
-e |
"檔名"是否存在? |
-f |
"檔名"是否存在且為檔案(file) |
-d |
"檔名"是否存在且為目錄(directory) |
b. 兩個整數之間的判斷
測試標誌 | 意義 |
-eq |
相等(equal) |
-ne |
不相等(not equal) |
-gt |
$var1大於$var2(greater than) |
-lt |
$var1小於$var2(less than) |
-ge |
$var1大於等於$var2(greater than or equal) |
-le |
$var1小於等於$var2(less than or equal) |
c. 字串判斷
test指令 | 中括弧 | 意義 |
test -z string |
[ -z string ] |
判斷字串是否為0,若string為空字串則為 true |
test -n string |
[ -n $var1 ] |
判斷字串是否非為0,若string為空字則為 false |
test str1 == str2 |
[ str1 == str2 ] |
tr1 是否等於 str2 ,若相等則回傳 true |
test str1 != str2 |
[ str1 != str2 ] |
str1 是否不等於 str2 ,若相等則回傳 false |
d. 多重條件判斷class="mytable"
測試標誌 | 意義 |
-a |
and)兩狀況同時成立ex: [ $var1 == $var2 -a $var3 == $var4 ] |
-o |
(or)兩狀況任何一個成立ex: [ $var1 == $var2 -o $var3 == $var4 ] |
! |
反相狀態(not)ex: [ ! $var1 == $var2 -a $var3 == $var4 ] |
2. 程式自動定義的變數
執行shell script的時候會自動產生的一些變數
測試標誌 | 意義 |
$? |
表示上一個指令的離開狀況,一般指令正常離開會傳回 0。不正常離開則會傳回 1、2 等數值 |
$$ |
這一個 shell 的 process ID number |
$! |
最後一個在背景執行的程式的 process number |
$- |
這個參數包含了傳遞給 shell 旗標 (flag) |
$1 |
代表第一個參數,$2 則為第二個參數,依此類推。而 $0 為這個 shell script 的檔名 |
$* |
$* 代表 "$1 $2 $3..." |
$@ |
$@ 代表 "$1" "$2" "$3".... |
$# |
執行時,給這個 Shell Script 參數的個數 |
3. 四則運算:
在 shell 中的四則運算必須使用 expr 這個指令來輔助,如果要將結果指定給變數,必須使用 ` `包起來
ps. 在 + - * / 的二邊都有空白,如果沒有空白將產生錯誤
# 加法
$ expr 5 + 2
# 減法
$ expr 5 - 2
# 乘法
$ expr 5 \* 2
# 除法
sum=`expr 5 + 2`
echo $sum
也可以用$(())來做數值的運算
echo $(( 1 + 2 ))
echo $(($var1*$var2))
注意:在shell中$(())非指令,所以在command line中直接輸入$(())會跑出
$ $(( 1 + 2 ))
3: command not found
沒有留言:
張貼留言