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

 

 

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值