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"

在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


迴圈與參數
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 #取餘數

留言