玩转Bash脚本:循环结构之for循环

总第7篇

for循环

基本格式

for 变量 in 取值列表
do
    各种操作
done

还有罕见的写法就是都写作一行里:

for 变量 in 取值列表 ; do 各种操作 ;done

取值列表大致可以分成枚举和迭代两类

枚举

普通枚举

取值列表为空格或回车符分割的字符串

for i in 'apple' 'meat' 'sleep' 'woman'
do
    echo I like $i
done

在终端执行该脚本for.sh。运行结果

jelly@X:~$ bash for.sh 
I like apple
I like meat
I like sleep
I like woman

配合命令替换

命令替换即` `和$( )两种操作符的使用。命令替换配合for循环很常见。
比如我系统的用户叫做jelly,现在我新建了一个叫做guodong的用户。 但是guodong用户缺少很多组权限。我想让guodong拥有jelly所在的全部组。
那么我可以这样:

for var in `groups jelly`
do
    echo $var #打印组名
    gpasswd -a guodong $var
done

请用root运行该脚本,这样就完成了一个给用户guodong批量添加组的任务。

迭代

花括号{ }

  • 数字迭代,比如{1..100}
  • 字母迭代,比如{a..z},{A..Z},{Z..A}
  • ASCII字符迭代,比如{a..A}

来计算一下1加到100的和

#!/bin/bash
ans=0
for i in {1..100}
do
    let ans+=$i
done
echo $ans

结果是5050.
花括号的迭代还可以指定指定增量,格式如下:

{首..尾..增量}  

来我们计算一下1到100以内的所有奇数的和:

for i in {1..100..2}
do
    echo $i
done

seq

需要配合命令替换使用。seq命令的格式为:

seq 首数 [增量] 末数

请注意增量的位置在中间,这与前面提到的花括号不同。
来看一个例子(改编自《Shell Scripting Expert Recipes for Linux,Bash,and More》P114
用脚本来ping一下局域网内的主机:

#!/bin/bash
PREFIX=192.168.1.
for i in `seq 100 110`
do
    echo -n "${PREFIX}$i "
    ping -c5  ${PREFIX}${i} >/dev/null 2>&1
    if [ "$?" -eq 0 ];then
        echo "OK"
    else
        echo "Failed"
    fi
done

当然了for循环也可以写作for i in {100..110}
终端运行的结果

jelly@X:~$ bash ping.sh 
192.168.1.100 Failed
192.168.1.101 Failed
192.168.1.102 OK
192.168.1.103 OK
192.168.1.104 OK
192.168.1.105 OK
192.168.1.106 Failed
192.168.1.107 Failed
192.168.1.108 Failed
192.168.1.109 Failed
192.168.1.110 Failed

C风格for循环

Bash还支持C语言风格的for循环,这个很好理解,我们直接来看例子,去计算一下1到100的和。

#!/bin/bash
ans=0
for ((i=1;i<=100;i++))
do
    let ans+=$i
done
echo $ans

注意!!!这里的for循环要有两层括号。


本系列(玩转Bash脚本)更多文章,请访问:http://blog.csdn.net/column/details/wanbash.html

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

果冻虾仁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值