有对是否在命令行或脚本在bash循环很多选择。选择取决于你想要做什么。
您可能需要无限循环或快速通过一周的天运行。您可能要循环一次,目录中的所有文件或一个服务器上的每个帐户。你可能会通过在一个文件中的每一行要循环或具有循环的数量是一个选择是运行脚本时。让我们看看一些选项。
简单循环
也许最简单的循环是一个对于环像下面的一个。因为有上线的文本片段会循环多次。我们会同样容易通过的话环路猫很聪明如数字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,你只会循环三次。
循环内循环
还有什么从一个循环内循环阻止你。在这个例子中,我们使用一个对于内环路而环。
#!/斌/庆典N = 1,而[$ N -lt 6]升在做{A..D}做回波$ N完成(第(n ++))$升完成
输出将在本例中包括1A,1B,1C,1D,2a和等等,在图5d结束。注意(第(n ++))用于增加的$ n的值,使而有一个停止点。
通过可变数据循环
如果通过系统上的每个帐户要循环,目录中的所有文件或一些其他类型的变量数据的,您可以在循环中发出命令,生成值的遍历列表。在这个例子中,我们遍历每个帐户(实际上是每一个文件)/家- 假设,因为我们应该想到,这还有没有其他文件或目录中/家。
用户在`LS#!/斌/庆典/ home`做做回声$用户
如果命令是日期代替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的字符类。第三个测试变量,以确保它仅包含数字。
当然,一旦你选择了你怎么喜欢测试用户的响应,以确保它的数字,你需要在循环跟进。在接下来的例子,当用户希望看到它,我们会打印出“你好”多次。该乐做了“小于或等于”测试。
#!/斌/庆典回声-n “我应该多少次打个招呼?” 读ANS如果[ “$ ANS” -eq “$ ANS”];则n = 1,而[$ N -le $ ANS]做回波你好(第(n ++))来完成连接
通过在一个文件中的行循环
如果您通过线(即,不是一字一句)的文件行的内容要循环,您可以使用这样一个循环:
#!/斌/庆典回波-n “文件>” 读文件n = 0时,同时读取线;做((N +))回声 “$ N:$行” 做<$文件
在上面的脚本中使用的字“行”是清晰的,但你可以使用任何变量名。该而读并在脚本的最后一行文件内容的重定向是什么提供行由行读数。
永远循环
如果你想永远循环下去,或者直到,好了,有人已经厌倦了看到脚本的输出,并决定杀死它,你可以简单的使用而真正的句法。
#!/斌/庆典,而真正做回声-n完成日期睡眠10“仍然在运行”
上面显示的例子是基本上只(原谅双关语),你可能需要做的,只是意味着远远跑无疑更有用的命令提供了基本的语法“壳”的那种真正的工作。