抖音资讯

douyinzx

shell无限循环执行脚本(shell运行脚本的命令)

iseeyu2年前 (2024-05-07)抖音资讯127

熟悉其他高级语言的伙伴们肯定了解循环控制语法是编程中非常基础的内容,今天就介绍Shell 中设计循环控制的语法,for/while/until 等内容。

for 命令

for 命令是最简单的循环控制语句,它的格式为:

for var in list
do 
	commands
done

语法比较简单,不做冗余的介绍了,直接上例子:

图1

输出结果:
The next brand is MacOS
The next brand is Windows
The next brand is Linux
The next brand is Unix
The next brand is Deepin
The last brand is Deepin
The modified brand is Deepin

从图1 中;item 作为临时变量在 ”MacOS WIndows Linux Unix Deepin"列表中循环赋值,然后循环执行do 至 done 之间的语句。这里值得注意的是:item 作为 for 循环的局部变量(或者是栈变量)在循环体外依然可以访问,例如在done 退出循环体后,依然可以访问 item 这个for循环体内的局部变量,这个是和其他高级语言不太相同的。具有高级语言的伙伴们可能第一次会觉得有些奇怪,不过这是Shell 语言的特点,这和C++那些声明式的高级语言是有区别的。在C++中所有变量使用前必须要声明类型,而在Shell 中却没有这样的规定。for 循环中的列表可以有多种形式,可以像图1中那样直接枚举,也可以定义成一个变量,也可以通过命令的返回作为 list 对象(例如可以通过cat file将file中的内容作为list返回)这里就不一一举例了。

修改字段分隔符

上面的例子中,我们发现,list使用过空格来作为分隔符的。那么是什么决定用空格作为list分隔符的呢。其实这里是通过环境变量 IFS (internal field separator) bash shell 的分隔符默为:

  • 空格
  • 制表符
  • 换行符

默认的分隔符优惠会造成麻烦,尤其是需要处理的数据中包含空格时。例如

文件名为:my_file

如图,第二行"New York"中包含了空格,所以for 循环式,“New York”会被认为两个元素。此结果并不是我们想要的。这是我们可以修改 IFS 只为换行符,来规避这种情况。

IFS=$'\n':; #可以一次指定多个符号作为分隔符,只需要将符号串联一起。此例子中换行符,冒号和分号都作为分隔符。

图2

输出结果:
value is China
value is New York
value is London
value is Japan

图2中,我们修改IFS前先将旧的IFS保存下来,然后在适当的地方恢复,这对于脚本中部分逻辑需要恢复默认的 IFS 时提供了方法。

while 命令

while 命令其实是 if-then 和 for 循环的结合体。格式如下:

while test command
do
	commands
done

当 "test command" 返回码为 0 时,do 后的commands 会循环执行。此处应该注意的是:"test command" 需要在 do 的执行过程中发生变化,否则while循环将会无法停止。

until 命令

until 命令和 while 命令工作方式完全相反,until 是等到命令的返回码不为0 时,才执行循环体中的命令,格式如下:

until test commands
do
	other commands
done

上例子:

图3

图3中 until 后判断var1 是否为0, 不为零是, 表达式返回码为非 0 ,此时执行do 循环体内的命令,当 var1 为0 时, 返回码为0, 此时until 循环结束。

循环控制

break 命令:是退出当前循环的简单命令。

图4

输出结果
the number is 1
the number is 2
the number is 3
The loop is completed

从图4中可以看出,当 var==4 时,for 循环会满足break 条件而退出。break 也适合while 和 until 的循环。break 的默认规则和其他语言,例如C/C++相同,只会退出当前的循环,如果出现循环嵌套,那么只会退出break 所在的循环。

break 跳出外部循环

break 语句除了默认的跳出当前循环,还能控制跳出外部循环,这是C/C++语言没有的特性。语法格式为:

break n #n为1则是跳出当前循环,n为2 则是跳出上一级循环

上例子:

图5

输出结果:

Outer loop: 1
Inner loop:1
Inner loop:2
Inner loop:3
Inner loop:4

从图5中可以看出是一个嵌套循环,在内部循环中,当b大于4时,"break 2" 会跳出上一级循环,所以外部循环只执行一次就被内部循环的break 语句退出了。这种用法在其他语言中不太常见,而且也不是特别推荐的用法。因为推出外部循环处理不当,可能会产生异非想要的结果。

continue 命令

continue 的原理和C/C++相同,会提前终止循环,但是不会退出循环。对于没有编程经验的小伙伴,听起来有点绕,可以理解为程序逻辑的短路行为。直接上代码:

图6

输出结果为:
the number is 1
the number is 2
the number is 3
the number is 4
the number is 5
the number is 10
the number is 11
the number is 12
the number is 13
the number is 14

如图6, continue 命令会跳过 5<var1<10 的输入,它只是让循环短路,没有执行循环体中continue后面的内容,但是循环体本身并没有退出。

continue 短路外部循环

continue 也有 break 类似的控制外部循环的命令,语法格式为:

continue n #短路到外部n层嵌套循环

例子和 ‘break n’类似,这里就不再赘述了。

循环语句在实际工作中是非常有用的,例如你想创建多个用户,那么就可以在所有用户名存储在文件中,然后写个shell脚本去读取文件,然后通过循环操作依次去除用户名,然后再通过 useradd 命令添加用户。所有命令在 shell脚本中执行,一气呵成,非常便利。

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/43161.html

相关文章

抖音粉丝团怎么升级快又省钱(抖音粉丝团升级攻略)

抖音粉丝团怎么升级快又省钱(抖音粉丝团升级攻略)

  现在越来越多的人知道做短视频能够赚钱,但是大部分人都是没有经验的小白,不懂拍摄剪辑技巧,你凭着自己的一腔热血,在里面横冲直撞,最后撞的头破血流。虽然有一些人经过自己不断的学习和努力,视频拍摄和剪辑的作品非常的好,但就是播放量仍徘徊在300~500没有突破,作品点...

内存怎么插组成双通道(组建内存双通道正确插法)

内存怎么插组成双通道(组建内存双通道正确插法)

我们在装机或者是升级内存的时候,发现主板上有四个内存插槽的情况下,不知道插哪根内存插槽上才可以,其实理论上任意插到哪一根内存插槽上都是可以正常使用的,但是任意插的情况下,不一定能够组建双通道,而组建双通道也是有讲究的。那么双通道内存是什么意思?怎么安装?下面装机之家为大家科普一下内存双通道知识,...

360搜索推广开户流程,锁定用户群体覆盖整个投放流程

360搜索推广开户流程,锁定用户群体覆盖整个投放流程

360搜索推广是基于360平台,通过360特有的匹配技术,对网民的搜索词进行匹配,定位目标用户从而精确展现企业的推广信息的营销产品。360搜索开户是360公司推出的基于360搜索平台的付费点击服务,需360搜索开户可联系巨搜科技全国360搜索广告代理商,全国360搜索代理商可开各类账户。...

应用下载类API归因上报(下)| 快手推广代运营

应用下载类API归因上报(下)| 快手推广代运营

附件一 :监测参数表 以下为快手支持的参数值及对应说明。其中,无对应值或快手未获取到值的占位符,不做替换或替换为空字符串(非空格),注意:占位符前后都为双下划线。 占位符 系统 说明 例子 __ACCOUNTID__...

快手生意通在哪里打开(开通快手小店流程)

快手生意通在哪里打开(开通快手小店流程)

为了可以更好地帮助快手卖家们做好直播,分析直播受众及推广方向,快手生意通的直播板块也在近期进行了新的升级,用更多数据维度,助力商家提升收入。一起了解该板块到底有什么优势和功能。   1、看核心数据,把控全局 直播前期,商家通过【数据看板】实...

百度广告:人群投放提供排除已转化用户的快捷设置--全流量上线

百度广告:人群投放提供排除已转化用户的快捷设置--全流量上线

一、【升级背景】 百度搜索广告投放中,部分广告主针对拉新(吸引新用户)和拉活(已触达用户的激活、唤醒)两种营销诉求,在传播内容、投放预算和考核要求上存在明显差异。因此排除已转化用户的投放设置,已经成为效果广告投放中的高频场景。另外在部分情况下,广告主针对已转化人群的定义和时间设置要求较为简单,期望...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片