if else以及大於、小於、等於邏輯運算式 if ....; then
....
elif ....; then
....
else
....
fi [ -f "somefile" ] :判斷是否是一個檔案
[ -x "/bin/ls" ] :判斷/bin/ls是否存在並有可執行許可權
[ -n "$var" ] :判斷$var變數是否有值
[ "$a" = "$b" ] :判斷$a和$b是否相等
-r file 使用者可讀為真
-w file 使用者可寫為真
-x file 使用者可執行為真
-f file 檔案為正規檔案為真
-d file 檔案為目錄為真
-c file 檔案為字元特殊檔案為真
-b file 檔案為塊特殊檔案為真
-s file 檔案大小非0時為真
-t file 當檔案描述符(預設為1)指定的裝置為終端時為真
#########################################################
整數比較
-eq 等於,如:if [ "$a" -eq "$b" ]
-ne 不等於,如:if [ "$a" -ne "$b" ]
-gt 大於,如:if [ "$a" -gt "$b" ]
-ge 大於等於,如:if [ "$a" -ge "$b" ]
-lt 小於,如:if [ "$a" -lt "$b" ]
-le 小於等於,如:if [ "$a" -le "$b" ]
< 小於(需要雙括弧),如:(("$a" < "$b"))
<= 小於等於(需要雙括弧),如:(("$a" <= "$b"))
> 大於(需要雙括弧),如:(("$a" > "$b"))
>= 大於等於(需要雙括弧),如:(("$a" >= "$b"))
字串比較
= 等於,如:if [ "$a" = "$b" ]
== 等於,如:if [ "$a" == "$b" ],與=等價
注意: [[]]和[]中的行為在某些情況下是不同的:
[[ $a == z* ]] # 如果$a 以"z"開頭(模式比對)那麼將為true
[[ $a == "z*" ]] # 如果$a 等於z* (字元匹配),那麼結果為true
[ $a == z* ] # File globbing 和word splitting 將會發生
[ "$a" == "z*" ] # 如果$a 等於z* (字元匹配),那麼結果為true
for i in {1..10}
do
echo $i
done
#詳細列出(字元且項數不多)
for File in 1 2 3 4 5
do
echo $File
done
#對存在的檔案進行迴圈
for shname in `ls *.sh`
do
name=`echo "$shname" | awk -F. '{print $1}'`
echo $name
done
#尋找迴圈(ls資料量太大的時候也可以用這種方法)
for shname in `find . -type f -name "*.sh"`
do
name=`echo "$shname" | awk -F/ '{print $2}'`
echo $name
done
#((文法迴圈--有點像C文法,但記得雙括弧
for((i=1;i<100;i++))
do
if((i%3==0))
then
echo $i
continue
fi
done
#seq形式 起始從1開始
for i in `seq 100`
do
if((i%3==0))
then
echo $i
continue
fi
done
#while迴圈注意為方括弧[],且注意空格
min=1
max=100
while [ $min -le $max ]
do
echo $min
min=`expr $min + 1`
done
#雙括弧形式,內部結構有點像C的文法,注意賦值:i=$(($i+1))
i=1
while(($i<100))
do
if(($i%4==0))
then
echo $i
fi
i=$(($i+1))
done