shell提供的循環結構有三種:until while for
分別用三種實現乘法口訣表。
while
語法 while test-commands; do consequent-commands; done
while
是條件不成立,才退出。
test-commands
的返回值爲0
表示成功,非零
表示失敗。和其他語言有點不同。while
是一個代碼段,可以看成一個完整的指令,退出狀態碼是最後一條指令的執行結果,如果do done
之間沒有指令,那麼返回0
。
iiter=1
while [ $iiter -lt 10 ]
do
jiter=1
while [ $jiter -le $iiter ]
do
echo -n "$iiter*$jiter=$(($jiter*$iiter)) "
jiter=$(($jiter+1))
done
echo ""
iiter=$(($iiter+1))
done
until
語法
until test-commands; do consequent-commands; done
until
是條件成立,才退出。
test-commands
的返回值爲0
表示成功,非零
表示失敗。和其他語言有點不同。until
是一個代碼段,可以看成一個完整的指令,退出狀態碼是最後一條指令的執行結果,如果do done
之間沒有指令,那麼返回0
。
iiter=1
until [ $iiter -ge 10 ]
do
jiter=1
until [ $jiter -gt $iiter ]
do
echo -n "$iiter*$jiter=$(($jiter*$iiter)) "
jiter=$(($jiter+1))
done
echo ""
iiter=$(($iiter+1))
done
for
語法
for name [ [in [words …] ] ; ] do commands; done
words
會進行單詞擴張,[word ...]
表示一個集合,word
擴張同屬於集合。如果in words
沒有,那麼就默認填充in $@
。如下所示。
可以看成一個完整的指令,退出狀態碼是最後一條指令的執行結果,如果do done
之間沒有指令,那麼返回0
。
for (( expr1 ; expr2 ; expr3 )) ; do commands ; done
這一種for
循環和C
語言幾乎一模一樣。除了裏面的指數運算不一樣,其他的都是一樣的邏輯運算,優先級也一樣。同樣也有
break continue
for i in {1..9}
do
for j in `seq 1 $i`
do
echo -n "$i*$j=$(($i*$j)) "
done
echo ""
done
for (( i=1 ; i < 10 ; i++ ))
do
for (( j=1 ; j < $i ; j++ ))
do
echo -n "$j*$i=$(($i*$j)) "
done
echo ""
done