Shell基础-day5-循环语法

it2023-01-10  44

1,for循环     

for 变量名 [ in 取值列表 ] do 循环体 done

for循环默认是按照空格分隔变量值的,注意for循环的循环次数是固定的。

for val in a b c do echo $val done

        注意上面的脚本会输出a b c

下面的例子实现的是for创建多个用户,需要创建一个文件,文件中每行的格式是:用户名  密码

#!/usr/bin/bash #判断脚本是否有参数 if [ $# -eq 0 ]; then echo "usage: `basename $0` file" exit 1 fi #希望for处理文件按回车分隔,而不是空格或tab空格 #重新定义分隔符 #IFS内部字段分隔符 IFS=$'\n' for line in `cat $1` do if [ ${#line} -eq 0 ]; then continue fi user=`echo "$line" | awk '{print $1}'` pass=`echo "$line" | awk '{print $2}'` id $user &>/dev/null if [ $? -eq 0 ];then echo "user $user already exists" else useradd $user echo "$pass" |passwd --stdin $user &>/dev/null if [ $? -eq 0 ];then echo "$user is created" fi fi done

2,while循环

while 条件测试 do 循环体 done

     因为 for使用的是空格作为分隔符,而while可以直接以回车作为分隔符,因此当需要处理文件的时候,优先考虑到的就是while,而不是for。

#!/usr/bin/bash #while create user #会从文件user.txt里面读入一行给user #当读到文件尾时,read line不会成功 while read line do user=`echo "$line" | awk '{print $1}'` pass=`echo "$line" | awk '{print $2}'` id $user &>/dev/null if [ $? -eq 0 ];then echo "user $user already exists" else useradd $user echo "$pass" |passwd --stdin $user &>/dev/null if [ $? -eq 0 ];then echo "$user is created" fi fi done < user.txt

 

最新回复(0)