for循环
语法1:
for 变量 in 值1 值2 值3...
do
程序
done
注意事项:for循环的次数取决于in 后面的值的个数
例如1:赋值,打印变量i
gjl@gjl-virtual-machine:~/shellTest$ cat test13.sh #!/bin/bash for i in 1 2 3 4 do echo $i done gjl@gjl-virtual-machine:~/shellTest$ ./test13.sh 1 2 3 4
例如2:解压文件
#!/bin/bash ls *.tar.gz>tar.log for( i in $(cat tar.log)) do tar -zxvf $i done
例如3:批量添加用户
#!/bin/bash read -t 30 -p "please input user name:" name read -t 30 -p "please input number of users:" num read -t 30 -p "please input the password of users:" passs #判断三个变量不为空 if [ ! -z "$name" -a ! -z "$num" ! -a -z "$pass" ] then
#将输入的文本中数字进行替换为空,如果y变量为空,则证明输入的是数字,否则不是数字 y=$(echo $num | sed 's/[0-9]//g') if [ -z "$y" ]
#如果变量为空,证明输入的是数字 then for (( i=1;i<=$num;i++ )) do
#添加用户,用户变量名为变量name+变量i的数字 /user/sbin/useradd $name$i &>/dev/null
#给用户设定初始密码为变量pass的值 echo $pass | /user/bin/passwd --stdin $name$i &>/dev/null
#强制用户登录后修改密码 chage -d 0 $name$i &>/dev/null done fi fi
例如4:批量删除普通用户
#!/bin/bash user=$(cat /etc/passwd | grep '/bin/bash" |grep -v "root" | cut -d ":" -f 1) for i in $user do userdel -r $i & /dev/null done ~
语法2:
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
注意事项:
初始值:在循环开始时,需要给某个变量赋予初始值,如i=1;
循环控制条件:用于指定循环的次数,如i<=100
变量变化:每次循环后,变量如何变化。如i=i+1
例如1:求1到100的和
gjl@gjl-virtual-machine:~/shellTest$ ./test14.sh 5050 gjl@gjl-virtual-machine:~/shellTest$ cat test14.sh #!/bin/bash s=0 for (( i=1;i<=100;i++ )) do s=$(($s+$i)) done echo $s
例如2:解压文件
gjl@gjl-virtual-machine:~/shellTest$ cat test15.sh #!/bin/bash cd /home/gjl/shellTest #将文件名称写到log文件中,每个文件名称会占一行 ls *.tar.gz > tar.log
#将文件名称追加到log中,报错信息放到回收站 ls *.tgz >> tar.log & >/dev/null #获取压缩包个数 aa=$(cat tar.log | wc -l) for (( i=1;i<='$aa';i=i+1 )) do #读取行数,bb为指定的压缩文件
bb=$(cat tar.log | awk ' NR == '$i'{print $i}')
#将文件解压到指定目录下 tar -zxvf $bb -C /home/gjl/shellTest done