for and while

root
233
文章
0
评论
2020年2月2日19:02:03 评论 3792字阅读12分38秒

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

 

 

继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2020年2月2日19:02:03
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
网站数据会滚脚本 shell

网站数据会滚脚本

网站数据会滚脚本 当代码经过测试环境后,正式进入生产环境,突然发现有问题,这时候需要立刻还原数据,写一个简单的网站代码回滚脚本 java项目的 #!/bin/bash Web_Dir=/server/...
三剑客练习 shell

三剑客练习

三剑客练习 grep I am hewenfu teacher! I teach linux. test I like badminton ball ,billiard ball and chines...
awk练习 shell

awk练习

awk 1.列出UID=0的用户 # awk -F : '$3==0' /etc/passwd root:x:0:0:root:/root:/bin/bash 2.列出系统的用户 # awk -F :...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: