shell_base
1、使用if_then語句
if command
then
commands
fi
先運行if后面的命令,如果命令的退出狀態是0(成功執行命令),就將執行then后面,fi前面的所有命令。否則就跳到fi后面繼續執行。
2、if-then-else語句
if command
then
commands
else
commands
fi
3、嵌套if語句
if command1
then
commands
elif command2
then
commands
elif command3
then
commands
fi
4、test命令(方括號[ ]為同義詞)
用于提供對條件的判斷
if test condition 也可以不用test condition,而使用 [ conditon ] ([ , ] 的前后必須有空格)
then
commands
fi
condition有三種:
(1)數值比較: –eq, –ne, –ge,-gt, -le, lt
但是要注意:test命令無法處理存儲在變量中的浮點值。
使用bash計算器bc時,只是欺騙了shell把浮點值作為字符串值存儲于一個變量中。如果只是先使用echo語句顯示結果,這種方法很好。但是在面向數值的函數(如數值測試條件)中不起作用。
底線是不能在test中使用非整數變量
(2)字符串比較:=,!=,<,>,-n(檢測字符串長度是否大于0),-z(檢測字符串長度是否等于0)
字符串相等:測試比較將所有標點符號和大寫都考慮在內
字符串順序:要注意兩點:
1)’>’,’<’一定要用’\’轉義,否則shell會將它們當做重定向符號,將字符串值看做文件名
2)大于和小于的順序與在sort命令中的順序不同。
在test中,同一個字母,大寫字母>小寫字母
在sort中,相反。
字符串大小:評估一個變量是否包含數據時,使用-n和-z比較方便
對空變量和未初始化的變量檢測出的長度也為0
(3)文件比較
文件比較是shell腳本中最強大和最常用的一類比較。
test可以測試文件狀態和路徑。(使用的非常頻繁!)
-d file: 檢查file是否存在并且是一個目錄
-e file: 檢查file是否存在
-f file: 檢查file是否存在并且是一個文件
-r file: 檢查file是否存在并且可讀
-s file: 檢查file是否存在并且不為空
-w file: 檢查file是否存在并且可寫
-x file: 檢查file是否存在并且可執行
-O file: 檢查file是否存在并且被當前用戶擁有
-G file:檢查file是否存在并且默認組是否為當前用戶組
file1 –nt file2: 檢查file1是否比file2新
file1 –ot file2: 檢查file1是否比file2舊
5、復合條件查詢
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]
6、if-then的高級特征
(1)使用雙圓括號表示數學表達式
(( expression ))
expression包括除了標準數學操作符外的其他操作符如下:
++, –, !, ~, **, <<, >>, &, |, &&, ||
(2)使用雙方括號表示高級字符串處理函數
[[ expression ]]
提供了除test命令中的標志字符串比較以外的模式匹配功能
在模式匹配中,可以定義與字符串值相匹配的正則表達式
7、case 命令
可以使用case命令,而不是編寫所有的elif語句來繼續檢查相同的變量值。
case命令以列表導向檢查單個變量的多個值
case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac
浙公網安備 33010602011771號