shell 编程 for循环

for循环

for循环和while循环类似,但是for主要用于执行次数有限的循环,而不是守护进程和无限循环。for语常见的语法有两种,下面是例子:

for语法

第一种是for为变量取值型,语法如下:

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

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

for(( 语法

此语法我们称之为c语言型for循环语句,其语法结构如下:

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

for关键字后的双括号内是三个表达式,第一个是变量初始化(例如:i=0),第二个为变量的范围(例如:i<100),第三个为变量自增或自减(例如:i++)

练习:

1、 for循环在/root下创建10个html文件,其中每个文件需要包含10个随机小写字母和数字,加固定字符串oldchang。名称示例如:apns1yrmk_oldchang.html。使用三种方法
提示:使用三种方法生成随机字符串
openssl rand -hex 10 | cut -c 1-10
cat /proc/sys/kernel/random/uuid | md5sum |cut -c 1-10
date | md5sum |cut -c 1-10
2、 使用for循环,将上面文件名中的oldchang改为oldduan,并将扩展名全部大写,使用三种方法
3、 使用for循环和if,筛选出以下单词中字符数大于等于6的单词:I am teacher oldchang and I like eating and sleeping
4、 for循环打印99乘法表
解决
1、 for循环在/root下创建10个html文件,其中每个文件需要包含10个随机小写字母和数字,加固定字符串oldchang。名称示例如:apns1yrmk_oldchang.html。使用三种方法
提示:使用三种方法生成随机字符串

for n in `seq 10`;do
    touch `openssl rand -hex 10 | cut -c 1-10`_oldchang.html
done                                                         

执行结果

[root@shell ~/html]# sh html.sh
[root@shell ~/html]# ls
213cbf897a_oldchang.html  717e95ca97_oldchang.html  ba301f9c67_oldchang.html  e6d8e4b6a0_oldchang.html
288109aaa5_oldchang.html  73f570e1fe_oldchang.html  c9f7206526_oldchang.html  html.sh
47cdb14eee_oldchang.html  953d2d26c4_oldchang.html  d3e4a618ef_oldchang.html

2、 使用for循环,将上面文件名中的oldchang改为oldduan,并将扩展名全部大写,使用三种方法

for file in `ls`;do
    mv  $file ${file//_*/}_oldduan.HTML        
done

执行结果

[root@shell ~/html]# sh mv.sh
[root@shell ~/html]# ls
213cbf897a_oldduan.HTML  717e95ca97_oldduan.HTML  ba301f9c67_oldduan.HTML  e6d8e4b6a0_oldduan.HTML
288109aaa5_oldduan.HTML  73f570e1fe_oldduan.HTML  c9f7206526_oldduan.HTML  html.sh_oldduan.HTML
47cdb14eee_oldduan.HTML  953d2d26c4_oldduan.HTML  d3e4a618ef_oldduan.HTML 

还可使用

ls |awk -F'_' '{print "mv",$0,$1 "_oldduan.HTML"}'|bash
rename "oldchang.html" "oldduan.HTML" *.html

3、 使用for循环和if,筛选出以下单词中字符数大于等于6的单词:I am teacher oldchang and I like eating and sleeping

for n in $1;do                        
    if [ "${#n}" -gt 6 ];then
        echo $n
    fi
done

执行结果

[root@shell ~/html]# sh   danchi.sh 'I am teacher oldchang and I like eating and sleeping'
teacher
oldchang
sleeping

还可用使用

[root@shell ~/html]# echo ${#a}
8
[root@shell ~/html]# echo $a|wc -L
8
[root@shell ~/html]# expr length $a
8
[root@shell ~/html]# echo $a|awk '{print length}'
8

4、 for循环打印99乘法表

for ((a=1;a<=9;a++));do
    for ((n=1;n<=$a;n++));do
        let mun=$a*$n
        echo -en "$a*$n=$mun\t"       
    done
    echo 
done
                                      

执行结果

[root@shell /server/scripts]# sh chengfabiao2.sh
1*1=1   
2*1=2   2*2=4   
3*1=3   3*2=6   3*3=9   
4*1=4   4*2=8   4*3=12  4*4=16  
5*1=5   5*2=10  5*3=15  5*4=20  5*5=25  
6*1=6   6*2=12  6*3=18  6*4=24  6*5=30  6*6=36  
7*1=7   7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49  
8*1=8   8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64  
9*1=9   9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81  
for ((a=9;a>=1;a--));do       
    for ((n=1;n<=$a;n++));do
        let mun=$a*$n
        echo -en "$a*$n=$mun\t
    done
    echo 
done

执行结果

[root@shell /server/scripts]# sh chengfabiao2.sh
9*1=9   9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81  
8*1=8   8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64  
7*1=7   7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49  
6*1=6   6*2=12  6*3=18  6*4=24  6*5=30  6*6=36  
5*1=5   5*2=10  5*3=15  5*4=20  5*5=25  
4*1=4   4*2=8   4*3=12  4*4=16  
3*1=3   3*2=6   3*3=9   
2*1=2   2*2=4   
1*1=1   

案例实操

1、 给出一个网段,如10.0.0.0/24,如何判断网段内的所有ip是否能联通

for ((a=0;a<=254;a++));do
    {
    ping -c 1 -w 1 10.0.0.$a &>/dev/null
    if [ $? -eq 0 ];then
        echo 10.0.0.$a
    fi }&                                   
done
 wait                                                    

{}的作用是把脚本放在后台.!wait 是脚本执行完自己退出脚本

执行结果

[root@shell ~/html]# sh ping.sh
10.0.0.7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值