Bash條件判斷與迴圈
基本判斷式
if [ ${default_option} -eq 1 ]; then
echo "\
${default_option}=1
"
else
echo "\
${default_option}!=1
"
fi
-eq 判斷相等的數值
-ne 判斷不相等的數值
-lt 判斷小於的數值
-le 判斷小於等於的數值
-gt 判斷大於的數值
-ge 判斷大於等於的數值
簡短if-else寫法
[ ${default_option} -eq 1 ] && echo "\${default_option}=1" || echo "\${default_option}!=1"
簡短if-else寫法
[ ${default_option} -eq 1 ] && echo "\${default_option}=1" || echo "\${default_option}!=1"
在BASH內的if-else和其他條件控制內不能為空敘述(換行也沒有用),如果想要寫可以使用冒號 : 寫在需要寫空敘述的位置。
if [ -z "${compile_path}" ]; then
echo 'zero length string'
else
echo 'non-zero length string'
fi
-z判斷長度為0的字串
-n判斷長度為非0的字串
[ A == B ]
[ A != B ]
[ A < B ]
[ A > B ]
if [ -f "/opt/toolchain/test.bin" ]; then
echo 'file exist'
else
echo 'file not found'
fi
-f用來判斷是一般檔案
-d用來判斷是目錄
-b用來判斷是block檔
-h用來判斷是symbol檔
-x用來判斷是可執行檔
-s用來判斷檔案存在且檔案大小大於0
多條件判斷
if [ -f "build/envsetup.sh" ] && [ -f "Makefile" ]; then
echo 'both file exist'
else
echo 'file not found'
fi
迴圈與參數
直接指定處理的檔案
單行迴圈
傳統迴圈
Ranged for-loop
online ranged for-loop
while迴圈
Switch-case語法
if [ "$#" -lt 1 ]
then
echo 'should give a argument';
exit -1;
fi
for var in "$@"
do
echo "$var"
done
直接指定處理的檔案
for f in file1 file2 file3
do
head -5 "$f"
done
單行迴圈
for f in *.java; do head -5 "$f"; done
傳統迴圈
for ((a=1; a <= 10; a++))
do
echo $a
done
Ranged for-loop
for a in {1..3}
do
echo "$a"
done
online ranged for-loop
for i in {1..5}; do echo "${i}"; done
while迴圈
while [ true ]
do
echo "loop body here..."
break
done
Switch-case語法
case "$VAR" in
0) echo "when $VAR is 0.";;
1) echo "when $VAR is 1.";;
*) echo "otherwise case.";;
esac
檢查是否為root
if [ "$(whoami)" != 'root' ]; then
echo "You have no permission to run $0 as non-root user."
exit 1;
fi
顯示錯誤訊息
errcho() {
echo "ERROR:" "$@" 1>&2
exit -1
}
errcho "test"
ERROR: test
數值運算
echo $(( {填運算式} ))
{填運算式}裡面可以放
expr1 | expr2 # 如果expr1非零,得到expr1,否則為expr2
expr1 & expr2 # 如果expr1和expr2都為0則得到0,否則為expr1
expr1 = expr2 # 等於的意思
expr1 > expr2
expr1 >= expr2
expr1 < expr2
expr1 <= expr2
expr1 != expr2
expr1 + expr2
expr1 - expr2
expr1 * expr2
expr1 / expr2
expr1 % expr2 #取餘數
留言