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 10

教材给出的脚本文件如下:

#!/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中不可能有这条指令,所以报错。

发布了19 篇原创文章 · 获赞 0 · 访问量 1463

猜你喜欢

转载自blog.csdn.net/Z_ammo/article/details/100545557