for循环
for循环语法
for 变量名 in [ 取值列表 ] do 循环体 done
案例1:取值列表的演示(in所取值列表可以是一个命令)
[root@web01 ~]# vim for.sh #!/bin/bash for i in `ls` do echo $i done [root@web01 ~]# sh for.sh anaconda-ks.cfg core.1946 Desktop Documents Downloads epel-7.repo epel-7.repo.1 expect.ex expr.sh for.sh
因为for循环中的赋值,是把每一个变量都遍历出来,这样就可以使用for循环结合判断,批量的对文件进行,赋值,改名,删除等等
案例2:批量ping在线主机是否连通
#!/bin/bash for i in `seq 70 72` 这里可以换254我为了演示快,就写了三个 do IP=192.168.5.$i ping -c 3 $IP &>/dev/null if [ $? -eq 0 ];then echo "$IP ok" else echo "$IP no" fi done [root@web01 ~]# sh for.sh 192.168.5.70 no 192.168.5.71 no 192.168.5.72 ok
案例3,(for循环多线程)接着案例2,由于单个线程ping多个ip地址耗费时间,我们启用大量线程并行完成任务,节约巨量时间
#!/bin/bash for i in `seq 254` do { IP=192.168.5.$i ping -c 1 -w 1 $IP &>/dev/null if [ $? -eq 0 ];then echo "$IP ok" else echo "$IP no" fi } & done wait #wait 完成之后输出信息,一定要写在循环体外面,做并发的时候一定要写 echo "ok....." [root@web01 ~]# sh for.sh 192.168.5.2 ok 192.168.5.7 ok 192.168.5.1 ok 192.168.5.72 ok 192.168.5.4 no 192.168.5.3 no 192.168.5.5 no 192.168.5.6 no 192.168.5.9 no 。。。。。。。。 is ok.... 瞬间出结果
案例4,创建不同姓名的用户
[root@web01 ~]# cat>>user.txt<<x > lishiming > zengguofan > aoteban > wuqixian > chenpeisi > x [root@web01 ~]# vim for.sh #!/bin/bash user=~/user.txt for i in `cat $user` do useradd $i if [ $? -eq 0 ];then echo "$i创建成功" else echo "$i创建失败" fi done [root@web01 ~]# sh for.sh lishiming创建成功 zengguofan创建成功 aoteban创建成功 wuqixian创建成功 chenpeisi创建成功
案例5,1..100求和
[root@web01 ~]# vim for.sh #!/bin/bash sum=o for i in `seq 100` do sum=$(($i+$sum)) let i++ done [root@web01 ~]# sh for.sh 5050
案例6,写一个脚本,计算100以为所有能被5整除的数相加的和
[root@web01 ~]# vim for.sh #!/bin/bash sum=0 for i in `seq 100` do num=$((${i}%5)) if [ ! $num -eq 0 ];then sum=$(($i+$sum)) fi let i++ done echo $sum [root@web01 ~]# sh for.sh 1050
案例7,1..100奇数和偶数分别求和
先对1-100偶数进行求和
[root@web01 ~]# vim for.sh #!/bin/bash sum=0 for i in `seq 100` do num=$((${i}%2)) if [ $num -eq 0 ];then sum=$(($i+$sum)) fi let i++ done echo $sum [root@web01 ~]# sh for.sh 2550
1-100奇数求和
[root@web01 ~]# vim for.sh #!/bin/bash sum=0 for i in `seq 100` do num=$((${i}%2)) if [ ! $num -eq 0 ];then sum=$(($i+$sum)) fi let i++ done echo $sum [root@web01 ~]# sh for.sh 2500
案例7,在/etc/passwd里抓取5个用户名,分别创建用户名的目录并在目录内创建由用户名的文件,但是这个用户名文件的名称,要名字后面由添加数字,这个数字为1-5
#!/bin/bash
kk=`awk -F ':' 'NR==1,NR==5{print $1}' /etc/passwd`
xx=0
for i in $kk
do
let xx++
mkdir $i
touch ${i}/${i}${xx}.txt
done
ls -l $i
案例8,做一个5*5 都是*的图案
#!/bin/bash
for i in `seq 5`
do
for w in `seq 5`
do
echo -n "* "
done
echo -e
done
案例9,做一个9*9的乘法表
#!/bin/bash
for i in `seq 9`
do
for w in `seq 9`
do
echo -n "${w}*${i}=$((${w}*${i})) "
done
echo -e
done
while
while循环语法
while 条件测试 do 循环体 done
案例1:条件测试
[root@web01 ~]# vim while.sh #!/bin/bash while [ -f ~/user.txt ] do echo "zai" exit done [root@web01 ~]# sh while.sh zai
案例2,1..100求和
[root@web01 ~]# vim while.sh #!/bin/bash i=0 sum=0 while [ $i -le100 ] do sum=$(($i+$sum)) let i++ done echo $sum [root@web01 ~]# sh while.sh 5050
案例3,写一个脚本,计算100以为所有能被5整除的数相加的和
[root@web01 ~]# vim while.sh #!/bin/bash i=0 sum=0 while [ $i -le 100 ] do num=$(($i%5)) if [ $num -eq 0 ];then sum=$(($i+$sum)) fi let i++ done echo $sum [root@web01 ~]# sh while.sh 1050
案例4,1..100奇数和偶数分别求和
1-100偶数求和
[root@web01 ~]# vim while.sh #!/bin/bash i=0 sum=0 while [ $i -le 100 ] do num=$(($i%2)) if [ $num -eq 0 ];then sum=$(($i+$sum)) fi let i++ done echo $sum [root@web01 ~]# sh while.sh 2550
1-100奇数求和
[root@web01 ~]# vim while.sh #!/bin/bash i=0 sum=0 while [ $i -le 100 ] do num=$(($i%2)) if [ ! $num -eq 0 ];then sum=$(($i+$sum)) fi let i++ done echo $sum [root@web01 ~]# sh while.sh 2500
案例5,创建不同姓名的用户,指定不同的密码,用for很麻烦,while简单
[root@web01 ~]# cat user.txt lishiming 123 zengguofan sda1 aoteban fsdf3 wuqixian dad1 chenpeisi xc1 [root@web01 ~]# vim while.sh #!/bin/bash while read x do name=`echo $x|awk '{print $1}'` echo $name passwd=`echo $x|awk '{print $2}'` echo $passwd useradd $name;echo "$passwd"|passwd --stdin $name &>/dev/null if [ $? -eq 0 ];then echo "$name创建成功" else echo "$name创建失败" fi done<user.txt [root@web01 ~]# sh while.sh lishiming 123 lishiming创建成功 zengguofan sda1 zengguofan创建成功 aoteban fsdf3 aoteban创建成功 wuqixian dad1 wuqixian创建成功 chenpeisi xc1 chenpeisi创建成功
查看密码是否是不是密文
案例6,做一个5*5 都是*的图案
#!/bin/bash
i=0
j=0
while [ $i -le 5 ]
do
while [ $j -le 5 ]
do
echo -n "* "
let j++
done
echo
let i++
j=0
done
案例6,做一个9*9的乘法表
#!/bin/bash
i=1
j=1
while [ $i -le 9 ]
do
while [ $j -le 9 ]
do
echo -n "${j}*${i}=$((${i}*${j})) "
let j++
done
echo
let i++
j=1
done
继续阅读

我的微信
这是我的微信扫一扫
评论