设为首页 收藏本站
查看: 985|回复: 0

第八章 shell学习之循环和结构化命令

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-8-15 08:58:04 | 显示全部楼层 |阅读模式
for循环
1.
列表for循环
for variable in {list}  #有些像C++/CLR中的for each
do
...
done
如:
1.
[iyunv@localhost tmp]# cat b.sh
#! /bin/bash
for i in 1 2 3 4 5      #1 2 3 4 5等价于{1..5}
do
echo $i
done
[iyunv@localhost tmp]# ./b.sh
1
2
3
4
5
2.
[iyunv@localhost tmp]# cat b.sh
#! /bin/bash
for i in $(seq 1 2 6)   #从1增加到6,步幅为2,相当于`seq 1 2 6`
do
echo $i
done
[iyunv@localhost tmp]# ./b.sh
1
3
5
3.
[iyunv@localhost tmp]# cat b.sh
#! /bin/bash
for i in $( ls )     #用命令ls的内容替换$( ls )
do
echo $i
done
[iyunv@localhost tmp]# ./b.sh
1c
a
a1
a1~
...
4.
[iyunv@localhost tmp]# cat b.sh
#! /bin/bash
for i in "$*"   #把输入的所有参数看做一个字符串整体
do
echo $i
done
[iyunv@localhost tmp]# vim b.sh
[iyunv@localhost tmp]# ./b.sh 1 2 3
1 2 3
[iyunv@localhost tmp]# cat b.sh
#! /bin/bash
for i in "$@"  #把输入的参数分开看待
do
echo $i
done
[iyunv@localhost tmp]# ./b.sh 1 2 3
1
2
3
2.
不带列表的for循环
for variable
do
...
done
相当于
for variable in "$@"
do
...
done
3.
类C风格的for循环
for((expr1;expr2;expr3))
do
...
done
如:
for((i=1;i<=100;i+=2))
do
...
done
while循环
1.
[iyunv@localhost tmp]# cat b1.sh
#! /bin/bash
echo "please enter start num:"
read i
echo ""$i"~10:"
while [ "$i" -ne 10 ]
do
echo $i
let "i++"
done
[iyunv@localhost tmp]# ./b1.sh
please enter start num:
6
6~10:
6
7
8
9
2.类C语言模式
[iyunv@localhost tmp]# cat b1.sh
#! /bin/bash
echo "please enter start num:"
read i
echo ""$i"~10:"
while ((i!=10))   #注意(()),和[ "$i" -ne 10 ]等价
do
echo $i
let "i++"
done
[iyunv@localhost tmp]# ./b1.sh
please enter start num:
6
6~10:
6
7
8
9
3.
[iyunv@localhost tmp]# cat b2.sh
#! /bin/bash
echo "you enter "$#" arguments"  #$#为参数的个数
while [ "$*" != "" ]  #注意空格,等价于[ "$#" != 0 ](把"$#"当做字符串)和[ "$#" -ne 0 ](吧$#当做数字)
do
echo "$1"
shift                        #shift为丢弃第一个参数($1),然后$1变为$2,$2变为$3以此类推
done
[iyunv@localhost tmp]# ./b2.sh hello world !
you enter 3 arguments
hello
world
!
until循环
和while循环类似,只是while当条件为真时继续循环,而until当条件为假时继续循环
[iyunv@localhost tmp]# cat b2.sh
#! /bin/bash
echo "you enter "$#" arguments"
until [ "$#" = 0 ]
do
echo "$1"
shift
done
[iyunv@localhost tmp]# ./b2.sh hello world !
you enter 3 arguments
hello
world
!
控制字符
break 跳出最内层的循环
continue 跳出当前循环执行下一次的循环
select结构
select结构为bash的扩展结构,类似于case,但交互性更好
例:
1.
[iyunv@localhost tmp]# cat b3.sh
#! /bin/bash
echo "what's your favorite color?"
select color in "red" "blue" "green"
do
break
done
echo "you have selected $color"
[iyunv@localhost tmp]# ./b3.sh
what's your favorite color?
1) red
2) blue
3) green
#? 2
you have selected blue
2.
[iyunv@localhost tmp]# cat b3.sh
#! /bin/bash
echo "what's your favorite color?"
select color          #相当于select color in "$@",类似于for color的情况
do
break
done
echo "you have selected $color"
[iyunv@localhost tmp]# ./b3.sh red blue green
what's your favorite color?
1) red
2) blue
3) green
#? 2
you have selected blue


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-23877-1-1.html 上篇帖子: 第七章 shell学习之退出、测试、判断及操作 下篇帖子: shell中正则表达式元字符
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表