Linux学习笔记:while…do…done的⽤法与注意
Linux系统中,while语句的句式为:
while expression
do
command-list
done
expression为判断语句,为真时不断执⾏command-list,为假时结束循环。
看起来很简单,但实际上并⾮如此。举个简单的例⼦,请输出以下语句:
Here again 1
Here again 2
Here again 3
Here again 4
Here again 5
Here again 6
Here again 7
Here again 8
Here again 9
Here again 10while语句简单例子
教材给出的脚本⽂件如下:
#!/bin/bash
foo=1
while [ "$foo" -le 20 ]
do
echo "Here again $foo"
foo=$(($foo+1))
done
exit 0
本⼈作为Linux⼩⽩⼀枚,发现短短⼏句话中涉及的知识点还挺多的,在这⾥总结⼀下。
第⼀⾏#!标记声明了即将使⽤哪种shell。
Linux的shell语⾔使⽤的判断条件都要⽤中括号“[ ]”包起来,要注意的是,每个中括号前后都要有⼀个空格,不然会报错“⾏3: [1: 未到命令”。本⼈就在这⾥栽过跟头。
判断条件中的"$foo"的双引号其实是可以去掉的,我发现去掉以后结果是⼀样的,也没有报错。后来才知道,如果在特殊情况下,foo变成⼀个空字符串,不加引号就会出现问题。在Linux的判断句⾥给字符串变量加上引号是个好习惯。
foo=$(($foo+1))包含两层功能,外层的$(...)表⽰⽤运⾏结果取代表达式,⽽内层的括号(...)则表⽰内部是⼀个数学公式,⽤计算结果取代公式。此外,获取数学公式的结果也可以⽤let命令或者expr命令。
突发奇想:如果我们去掉⼀层括号呢?
$ foo=1
$ echo $(($foo+1))
2
$ echo $($foo+1)
bash: 1+1: 未到命令...
可以清楚的看到,放在()内时,输出的是⼀个计算结果2,⽽去掉⼀层括号后,语句变成了echo $(1+1),⽽在Linux中,$()是命令替换语句,但是1+1如果不被⼩括号包起来的话就不是计算公式,⽽是⼀个名为‘1+1’的指令。除⾮⽤户⾃定义,否则Linux中不可能有这条指令,所以报错。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论