shell 流程控制 for循环

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

猜你喜欢

转载自www.cnblogs.com/recommencer/p/12741085.html