Abstract:1)"if else"
執行控制;
2)數學邏輯條件比較與字符串比較。
1、" if else "執行控制
Linux Shell 裡面實現“ if else if else
”執行控制如下:
if
條件;
then
執行代碼;
elif
條件;
then
執行代碼;
else
執行代碼;
fi
並且使用 "&&"
表示邏輯條件“與”,使用 "||"表示邏輯條件“或”。
2、條件比較2.1 數學邏輯條件比較
Linux Shell 的數學比較條件必須符合如下格式:
[條件 ]
前後方括號與條件之間都必須有空格符,不然會報錯!
note:多條件判斷出了使用 "&&" "||"
之外,還可以如下表示:
[ $var1 -ne 0 -a $var2 -gt 2 ] # "-a"
等效於"&&"
[ $var -ne 0 -o var2 -gt 2 ] # "-o"
等效於"||"
2.1.1常用數學邏輯條件比較運算符[ $var -eq 0 ] #返回真--如果變量為零
[ $var -ne 0 ] #返回真--如果變量不為零
[ $var -gt 0 ] #返回真--如果變量大於零
[ $var -lt 0 ] #返回真--如果變量小於零
[ $var -ge 0 ] #返回真--如果變量大於等於零
[ $var -le 0 ] #返回真--如果變量小於等於零
example:
#!/bin/bash echo -e "\e[42;31m --- \"ifelse\" follow control ---\e[0m"; var1=3; var2=5; if [ $var1 -eq 3 ] && [ $var2 -eq 7]; then echo "var=3 && var2=7"; elif [ $var1 -eq 2 ] || [ $var2 -eq 7 ]; then echo "var1=2"; else echo "var1=$var1 ; var2=$var2"; fi2.1.2常用文件系統的條件判斷
[ -f $var ]#判斷變量值是否為一個合法的文件路徑或文件名
[ -x $var ]#判斷變量值是否為一個可執行文件
[ -d $var ]#判斷變量值是否為一個文件夾路徑
[ -e $var ]#判斷變量值所指的文件是否存在
[ -c $var ]#判斷變量值所指的文件是否為字符設備文件
[ -b $var ]#判斷變量值所指的文件是否為塊設備文件
[ -w $var ]#判斷變量值所指的文件是否可寫
[ -r $var ]#判斷變量值所指的文件是否可讀
[ -L $var ]#判斷變量值所指的文件是否為一個鏈接文件
example:
echo -e "\e[42;31m --- filesystemrelated attribute test ---\e[0m"; fpath="/etc/passwd" if [ -e $fpath ]; then echo File exists; else echo Does not exist; fi2.2 字符串條件比較
Linux Shell 字符串條件比較必須符合如下格式:
[[字符串比較條件 ]]
前後雙方括號與條件之間都必須有空格符,不然會報錯!
[[ $str1 = $str2 ]]#判斷字符串是否相等
[[ $str1 == $str2 ]]#判斷字符串是否相等
[[ $str1 != $str2 ]]#判斷字符串是否不相等
[[ $str1 > $str2 ]]#判斷str1是否字母序上大於str2
[[ $str1 < $str2 ]]#判斷str1是否字母序上小於str2
[[ -z $str1 ]]#判斷str1是否為空字符串
[[ -n $str1 ]]#判斷str1是否不為空字符串
字符串比較同樣支持使用 "&&" "||"
的組合進行多條件聯合判斷。
example:
echo -e "\e[42;31m --- stringcomparison ---\e[0m"; str1="Not empty " str2="" if [[ -n $str1 ]] && [[ -z $str2]]; then echo str1 is non-empty and str2 is emptystring. fi2.3 使用 test命令進行條件判斷可以避免使用方括號
test 命令可以替代上面提到的所有方括號表示的條件判斷,並且比較的運算符都是兼容的;使用 man test
命令自行查看 test
命令的使用詳情。
example:
echo -e "\e[42;31m --- using\"test\" command to substitute using square bracket ---\e[0m"; var=1; if test $var -eq 0; then echo "True"; else echo "False"; fi