特殊用法一 while
文法格式
while read LINE; do
循環體
done < /PATH/FROM/SOMEFILE
功能:依次讀取/PATH/FROM/SOEMFILE檔案中的每一行,且将此行指派給LINE變量中
示例:掃描/etc/passwd檔案每一行,如發現GECOS字段為空,則填充使用者名和機關電話為123,并提示該使用者的GECOS資訊修改成功
#!/bin/bash
#
FILE=/etc/passwd
while read LINE; do
GE=`echo $LINE | cut -d: -f5`
USER=`echo $LINE | cut -d: -f1`
if [[ -z $GE ]]; then
usermod -c "${USER}123" $USER
echo "Modify $USER finished.."
else
echo "$USER can't modify"
fi
done < $FILE
unset FILE GE USER
特殊用法二 for
文法格式
for ((控制變量初始化;條件判斷表達式;控制變量的修正表達式)); do
done
功能:指派判斷和修正條件都是(())中完成,滿足判斷表達式即執行一次循環體,結束會先進行控制變量修正運算,而後再做條件判斷。
此用法和while很相似,完全可以完全替換,但是此用法更适合于數字的計算。
示例:計算1-10之和
#!/bin/bash
declare -i sum=0
for (( i=1; i<=10; i++ )); do
sum=$[sum+i]
done
echo $sum
unset sum i
特殊用法三 select
select variable in list; do
循環體指令
功能:select循環主要用于建立菜單,并顯示PS3 提示符,且使用者輸入被儲存在内置變量REPLY 中。一般與case同用,exit退出循環
#!/bin/bash
PS3="What would you like:"
select menu in noodles dumpling rice; do
case $menu in
noodles)
echo "Your choice is $REPLY,10$"
;;
dumpling)
echo "Your choice is $REPLY,15$"
;;
rice)
echo "Your choice is $REPLY,20$"
;;
*)
echo "Your choice is error.."
break
;;
esac
done