特殊用法一 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