· case命令
· for循環
· while循環
· until循環
· 死循環
· 命令行循環
# case命令 類比c的switch/case語句 esac表示語句塊的結束
# c中的switch/case只能匹配整型或字符型常量表達式
# 而shell中的case可以匹配字符串和Wildcard
# 每個匹配分支可以有若干條命令,末尾必須以;;(兩個分號)結束
# 執行時找到第一個匹配的分支並執行相應的命令
# 然後直接跳到esac之後,不用像c一樣用break跳出
case $1 in # $1是一個特殊變量執行腳本時自動取值爲第一個命令行參數
'start' )
echo "start...done"
;;
'stop' )
echo "stop...done"
;;
* )
echo "default"
;;
esac
# 假如有兩種情況需要走同一段邏輯如何處理
case $1 in
'start' | -s )
echo "start...done"
;;
'stop' | -p )
echo "stop...done"
;;
* )
echo "default"
;;
esac
# 支持通配符的情況
case $1 in
[sS]tart | -s )
echo "start...done"
;;
[sS]top | -p )
echo "stop...done"
;;
* )
echo "default"
;;
esac
# for循環語句
# 方式1
# 在(())結構中所有的運算和C是一樣的
for ((i = 0;i <= 5;i++ ))
do
echo "hello $i"
done
# 方式2
for i in {0..5}
do
echo "hello $i"
done
# for in這樣的循環的獨到之處就是遍歷字符等
for i in {a..e}
do
echo "hello $i"
done
# 也可以組合
for i in {a..c}{1..3}
do
echo "hello $i"
done
# 或者這樣組合
for i in {a..c} {1..3}
do
echo "hello $i"
done
# while循環
i=0
while [ $i -le 5 ]
do
echo "hello $i"
(( i++ )) #該句也可以使用let i++,二者等價
done
until循環,shell特有
i=0
until [ $i -ge 5 ]
do
echo "hello $i"
let i++
done
# 總結一下:
# while循環是當條件爲真時執行後面緊跟的do後面的語句
# until循環是條件爲假時才執行
# 死循環
# 方式1
for (( ; ; ))
do
echo "hello"
done
# 方式2
while : # 或者while true
do
echo "hello"
done
# 方式3
until false
do
echo "hello"
done
# 命令行循環
# 命令行循環與上面我們寫過的循環並無不同
# 只是在命令行上寫時每一條語句的後面都需要加上分號
# 練習1:求1~100的和
# 方式1:for循環
sum=0
for i in {1..100}
do
((sum=sum+$i))
done
echo "sum=$sum"
# 方式2:while循環
i=1
sum=0
while [ $i -le 100 ]
do
let sum+=i
let i++
done
echo "sum="$sum
# 練習2:求1~100的和並打印執行過程
sum=0
string=''
for i in {1..100}
do
let sum+=i
if [ -z "$string" ];then # 判斷是否爲一個空字符串
string=$i
else
string=$string'+'$i # 字符串拼接
fi
let i++
done