有对是否在命令行或脚本在bash循环很多选择。选择取决于你想要做什么。
您可能想要无限循环或快速遍历一周中的每一天。您可能希望对目录中的每个文件或服务器上的每个帐户进行一次循环。您可能希望循环遍历文件中的每一行,或者在运行脚本时选择循环的数量。让我们看看一些选项。
简单循环
可能最简单的循环是a为环像下面的一个。因为有上线的文本片段会循环多次。我们会同样容易通过的话环路猫很聪明如数字1,2,3和4。
#!/ bin中/ NUM个1 2 3 4 bash中做回声$ NUM完成
而且,为了证明这一点,这里的命令行类似的循环运行:
$一个字猫很聪明>做>回声$字>做猫很聪明
对于VS而
巴什同时提供为和一个而循环命令。在而环路,某些条件通过每次循环,以确定循环是否应该继续进行测试。这个例子实际上是等同于它是如何工作的前一个,但是想象一下,有什么区别,如果我们想代替循环444次的仅有4它将使。
#!/斌/庆典N = 1,而[$ N -le 4]做回声$ N((N ++))来完成
通过值范围循环
如果通过字母的每一个字母或字母一些限制范围要循环,你可以使用语法如下:
在{a到z}做回声$#!/斌/庆典为X X DONE
如果您使用{} d..f,你只会循环三次。
循环内循环
还有什么从一个循环内循环阻止你。在这个例子中,我们使用一个为内环路而环。
# !/bin/bash n=1,而[$n -lt 6]在{a..d} do echo $n$l done ((n++)) done
输出将在本例中包括1A,1B,1C,1D,2a和等等,在图5d结束。注意(n + +)用于增加的$ n的值,使而有一个停止点。
循环遍历变量数据
如果通过系统上的每个帐户要循环,目录中的所有文件或一些其他类型的变量数据的,您可以在循环中发出命令,生成值的遍历列表。在这个例子中,我们遍历每个帐户(实际上是每一个文件)/家- 假设,因为我们应该想到,这还有没有其他文件或目录中/家。
# !/bin/bash for user in ' ls /home ' do echo $user done
如果命令是日期代替LS /家,我们会贯穿各7个文字的date命令的输出。
在`date`美元词>做>回声$字>做周四2019年10月31日下午11:59:59 EDT
循环的请求
让运行脚本的人决定一个循环应该运行多少次也非常容易。但是,如果您想这样做,您应该测试所提供的响应,以确保它是数值型的。这个例子展示了三种方法。
#!/斌/庆典回声-n “我应该多少次打个招呼?” 读ANS如果[ “$ ANS” -eq “$ ANS”];然后回声OK1音响如果[[$ ANS = * [[:位:]] *]];然后回声OK2音响如果[[ “$ ANS”=〜^ [0-9] + $]];然后回声OK3网络
上面显示的第一个选项可能看起来有点古怪,但它的作品,因为当量测试仅在被比较的值是数字工作。如果测试下来到询问是否" f "情商" f ",它会失败。第二个测试使用bash字符类作为数字。第三个测试变量,以确保它只包含数字。
当然,一旦您选择了测试用户响应的方式以确保它是数值的,您就需要继续执行循环。在下一个示例中,我们将根据用户的需要多次打印“hello”。的乐做了“小于或等于”测试。
#!/斌/庆典回声-n “我应该多少次打个招呼?” 读ANS如果[ “$ ANS” -eq “$ ANS”];然后n=1 while [$n -le $ans] do echo hello ((n++)) done fi
通过在一个文件中的行循环
如果您通过线(即,不是一字一句)的文件行的内容要循环,您可以使用这样一个循环:
#!/斌/庆典回波-n “文件>” 读文件n = 0时,同时读取线;做((N +))回声 “$ N:$行” 做<$文件
上面脚本中使用的单词“line”是为了清晰起见,但是您可以使用任何变量名。的而读并在脚本的最后一行文件内容的重定向是什么提供行由行读数。
永远循环
如果你想永远循环下去,或者直到,好了,有人已经厌倦了看到脚本的输出,并决定杀死它,你可以简单的使用而真正的句法。
#!/斌/庆典,而真正做回声-n完成日期睡眠10“仍然在运行”
上面显示的例子是基本上只(原谅双关语),你可能需要做的,只是意味着远远跑无疑更有用的命令提供了基本的语法“壳”的那种真正的工作。