bash中for循环(转载)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
bash中for循环(转载)
总第7篇
for循环
基本格式
for变量in取值列表
do
各种操作
done
还有罕见的写法就是都写作⼀⾏⾥:
for变量in取值列表 ; do各种操作 ;done
取值列表⼤致可以分成枚举和迭代两类
1、枚举
普通枚举
取值列表为空格或回车符分割的字符串
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 x in `groups h1|awk -F ":"'{print $2}'`
do
gpasswd -a hh1 $x
done
请⽤root运⾏该脚本,这样就完成了⼀个给⽤户hh1批量添加组的任务。
[root@c61 ~]# useradd hh1
[root@c61 ~]# for x in `groups h1|awk -F ":"'{print $2}'`;do gpasswd -a hh1 $x;done
Adding user hh1 to group h1
Adding user hh1 to group hm1
[root@c61 ~]# id hh1
uid=501(hh1) gid=502(hh1) 组=502(hh1),500(hm1),501(h1)
2、迭代
花括号{ }
数字迭代,⽐如{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 `seq100110`
do
echo -n "${PREFIX}$i "
ping -c5 ${PREFIX}${i} >/dev/null2>&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 Failed192.168.1.110 Failed
3、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循环要有两层括号。