成功最有效的方法就是向有经验的人学习!

shell编程之for循环语句

1.for循环语句和while循环类似,但是for循环主要是用于执行次数有限的循环,而不是守护进程及无限循环,那么for循环的语法如下:

for 变量名 in 变量取值列表  
do  
    指令  
done

在这种for循环语法中,在for关键字后面会有一个变量名,变量名会依次的获取in后面的变量取值列表的内容,每取一个然后循环do 和done之间的部分 也就是指令。 之后再次循环下一个变量取值列表 然后执行do done之间的部分,直到变量取值列表的最后一个值并进入循环体后才结束。

2.第二种语法就是C语言型的for循环语句如下:

for ((exp1;exp2;exp3))  
do  
    指令  
done

例如1:

for ((a=1;a<=10;a++))  
do  
    echo $a  
done

输出结果如下:

[root@yankerp shell]# sh for_check.sh   
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
[root@yankerp shell]#

剖析:

for ((a=1;a<=10;a++)) #a=1 那么a就是1 a<=10 那么1<10 但是不等于10 所以后面a++增加1  
do  
    echo $a  #第一次输入$a是1 那么第二次 a++ 等于a+1 也就是1+1 第二次输出2 直到a=10  
done   #结束

以上的for循环类似于while语句 如下:

a=1  
while ((a<=10))  
do  
    echo $a  
    ((a++))  
done

输出结果如下:

[root@yankerp shell]# sh while.sh   
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
[root@yankerp shell]#

如果希望程序能够持续运行,那么while循环是最好的选择。

如果是限次循环的话,则多用for循环!!!

3、for循环的基础实践

例1:使用for循环打印 1 2 3 4 5 数字如下:

#!/bin/bash  
for zhangsan in 1 2 3 4 5  
do  
        echo $zhangsan  
done

在for关键字后面会有一个变量名,变量名会依次的获取in后面的变量取值列表的内容,每取一个然后循环do 和done之间的部分 也就是指令。 之后再次循环下一个变量取值列表 然后执行do done之间的部分,直到变量取值列表的最后一个值并进入循环体后才结束。

最后输出内容:

[root@yankerp shell]# sh for_check.sh   
1  
2  
3  
4  
5  
[root@yankerp shell]#

例如2:使用{}来打印1 2 3 4 5

在前几篇文章中有提过{}的用处,例如打印1-15 或者 a-z

[root@yankerp shell]# echo {1..15}   
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  
[root@yankerp shell]# echo {a..z}   
a b c d e f g h i j k l m n o p q r s t u v w x y z  
[root@yankerp shell]#

使用for循环结合{}循环

[root@yankerp shell]# cat for_check.sh   
#!/bin/bash  
for zhangsan in {1..5}   #或者 {a..z}  
do  
        echo $zhangsan  
done  
[root@yankerp shell]# sh for_check.sh    
1  
2  
3  
4  
5  
[root@yankerp shell]#

输出a-z

[root@yankerp shell]# sh for_check.sh   
a  
b  
c  
d  
e  
f  
g  
h  
i  
j  
k  
l  
m  
n  
o  
p  
q  
r  
s  
t  
u  
v  
w  
x  
y  
z  
[root@yankerp shell]#

实例3:批量修改文件后缀

shell编程之for循环语句

shell编程之for循环语句

我们看到 在这个目录下有这么多文件,但是他们的后缀名不同,但是需求就是我想把以txt格式的文件,都改为.sh的 第一种方法,一条条的手动改,第二种方法如下:

1.首先我们要改后缀名,我们先定义一个变量测试

[root@yankerp data]# aaa=csdn.txt  
[root@yankerp data]# echo $aaa  
csdn.txt  
[root@yankerp data]# echo $aaa | cut -d . -f1   
csdn  
[root@yankerp data]# echo "`echo $aaa | cut -d . -f1`".sh  
csdn.sh  
[root@yankerp data]#

剖析如下:

[root@yankerp data]# aaa=csdn.txt  #定义一个变量 aaa=csdn.txt 那么aaa就是csdn.txt  
[root@yankerp data]# echo $aaa     #echo $aaa 就是 csdn.txt  
csdn.txt        #输出的结果  
[root@yankerp data]# echo $aaa | cut -d . -f1 #在这里我们使用cut命令通过.为分隔符截取第一段    
csdn        #截出来的csdn 那么我们想,这时候在csdn后面加上一个.sh 是不是就好了 如下:  
[root@yankerp data]# echo "`echo $aaa | cut -d . -f1`".sh    #在以上的命令后面加上.sh 就实现了这个效果  
csdn.sh  
[root@yankerp data]#

以上是一个变量的方法,那么接下来编写for循环修改的方式

2.我们是需要把txt后缀改为sh结尾,那么我们肯定是要找出在这里目录下所有以txt文件结尾的文件如下:

[root@yankerp data]# ls | grep txt$  
a.txt  
b.txt  
c.txt  
d.txt  
uuub.txt  
[root@yankerp data]#

到这里我想应该很清楚了,接下来修改的方式和上面变量的方式一样 如下:

#!/bin/bash  
cd /root/data || {  
        echo "进入目录失败!!!"  
        exit 1  
}  
  
for zhangsan in `ls | grep txt$`  
do  
        mv $zhangsan `echo $zhangsan | cut -d . -f1`.sh  
done

3.剖析:

#!/bin/bash  
cd /root/data || {   #进入文件目录  
        echo "进入目录失败!!!"  #判断是否进入成功!!!  
        exit 1  
}  
  
for zhangsan in `ls | grep txt$`  #张三是一个变量 那么后面跟着那条命令 也就是所有以txt结尾的文件,开始循环  
do  
        mv $zhangsan `echo $zhangsan | cut -d . -f1`.sh  #这个就是上面的那个变量的命令。  
done

修改如下:

shell编程之for循环语句

shell编程之for循环语句


实例4:批量解压文件,如下:

shell编程之for循环语句

shell编程之for循环语句


在这个目录下我们看到有很多的包,但是有.tar.gz 的 有rar的 有zip的包,但是呢,我就想解压.tar.gz的包,第一种方法,手动一个个解压,那么第二种方式如下:

1.查看以.tar.gz的包有几个

shell编程之for循环语句

shell编程之for循环语句


2.编写脚本如下:

#!/bin/bash  
cd /root/data || {  
        echo "进入目录失败!!!"  
        exit 1  
}  
  
for zhangsan in `ls | grep .tar.gz$`  
do  
        tar zxf $zhangsan -C /root/log  
done  
  
if [ "$?" -eq 0 ];then  
   echo ".tar.gz 成功!!!"  
 else  
   echo "失败!!!"  
fi

运行结果如下:

shell编程之for循环语句

shell编程之for循环语句


实例5:开发批量创建用户脚本

首先批量创建用户还是很好实现的,如下:

#!/bin/bash  
  
NAME=yankai  
for zhangsan in `seq -w 1 5`  
do  
        useradd $NAME$zhangsan  
done  
if [ "$?" -eq 0 ];then  
   echo "创建用户成功!!!"  
 else  
   echo "创建用户失败!!!"  
   exit 1  
fi

运行如下:

shell编程之for循环语句

shell编程之for循环语句


但是问题来了,怎么去给用户加密码,用户是肯定需要密码的,普通我们给一个用户设置密码如下:

[root@yankerp ~]# echo 123456 | passwd --stdin zhangsan  
更改用户 zhangsan 的密码 。  
passwd:所有的身份验证令牌已经成功更新。  
[root@yankerp ~]#

我们随机匹配密码可以通过$RANDOM|md5sum进行加密的方式来截取前8位 如下:

shell编程之for循环语句

shell编程之for循环语句


那么接下来我们就有一定的思路去写脚本了如下:

#!/bin/bash  
. /etc/init.d/functions  
NAME=yankai  
ZF=`seq 1 10`  
  
for user in $ZF  
do  
    useradd $NAME$user  
    PASS="`echo $RANDOM|md5sum | cut -c 1-8`"  
  
    echo "$PASS" | passwd --stdin $NAME$user &>/dev/null  
    echo "$NAME$user的密码为:$PASS"  
if [ "$?" -eq 0 ]  
   then  
     action "$NAME$user is ok!" /bin/true  
   else  
     action "$NAME$user not ok!" /bin/false  
     exit 1  
fi  
done

执行如下:

shell编程之for循环语句

shell编程之for循环语句


剖析如下:

#!/bin/bash  
. /etc/init.d/functions   #加载函数库  
NAME=yankai     #定义名字为yankai  
ZF=`seq 1 10`   #这个取1-10的数字  
  
for user in $ZF     #for循环 user是变量 $ZF取数值  
do  
    useradd $NAME$user   #创建yankai账户并+1  
    PASS="`echo $RANDOM|md5sum | cut -c 1-8`" #定义随机密码 取前8位  
  
    echo "$PASS" | passwd --stdin $NAME$user &>/dev/null #设置用户密码  
    echo "$NAME$user的密码为:$PASS"    #输出用户密码  
if [ "$?" -eq 0 ]       #进行判断  
   then  
     action "$NAME$user is ok!" /bin/true  
   else  
     action "$NAME$user not ok!" /bin/false  
     exit 1  
fi  
done        #以上内容一直循环 直到seq 1-10 已经达到了10 那么退出循环!!

案例6:开发检测URL脚本

内容如下:

#!/bin/bash
. /etc/init.d/functions

function URL_Check(){
        wget --spider http://$1 &>/dev/null
                if [ "$?" -eq 0 ];
                   then
                     action "$1 检测成功!" /bin/true
                   else
                     action "$1 检测失败!" /bin/false
                fi
}

web="
www.baidu.com
www.jd.com
www.taobao.com
www.4399.com
www.baidu123.com
www.ywydhajkw.com
www.hahahhaha.conm
www.dhadwkldm.com
"           
            
            
for url in $web 
do         
        URL_Check $url
done

运行结果如下:

shell编程之for循环语句

shell编程之for循环语句


剖析如下:

shell编程之for循环语句

shell编程之for循环语句


赞(0) 打赏
未经允许不得转载:陈桂林博客 » shell编程之for循环语句
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册