2013年8月17日 星期六

Linux note(2)

今天練習寫了一下shell script發現判斷句和數值運算實在是不太會用,整理一下在網誌中
1. shell script的判斷句:
在shell中做邏輯的判斷可以用
  • test指令
  • [ ](中括弧)
注意:使用中括弧作為判斷的時候,變數兩邊需要留空白
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

沒有留言:

張貼留言