在本文中, 我们来看看linux shell script的循环结构, 还是那句话, shell script虽然简单, 但一不小心就会出错, 比如, 我写出了如下的一个错误脚本:
#! /bin/bash
read n
i=1
sum=0
while [ $i -le $n ]
do
$sum=$[ $sum + $i ]
$i=$[ $i + 1 ]
done
echo $sum
上面程序打算计算1-n的和, 但有问题, 因为赋值运算符的左边必须是左值啊, $sum和$i都是右值, 所以, 应该去掉$, 改后并运行, 结果如下:
[taoge@localhost learn_shell]$ cat a.sh
#! /bin/bash
read n
i=1
sum=0
while [ $i -le $n ]
do
sum=$[ $sum + $i ]
i=$[ $i + 1 ]
done
echo $sum
[taoge@localhost learn_shell]$
[taoge@localhost learn_shell]$
[taoge@localhost learn_shell]$
[taoge@localhost learn_shell]$ ./a.sh
100
5050
[taoge@localhost learn_shell]$
下面, 我们用let来改改, 得到:
[taoge@localhost learn_shell]$ cat a.sh
#! /bin/bash
read n
i=1
sum=0
while [ $i -le $n ]
do
let sum=$sum+$i
let i=$i+1
done
echo $sum
[taoge@localhost learn_shell]$
[taoge@localhost learn_shell]$
[taoge@localhost learn_shell]$
[taoge@localhost learn_shell]$ ./a.sh
100
5050
[taoge@localhost learn_shell]$
这个shell script赋个值还真麻烦, 跟C/C++完全没得比, 不过, 我们还是可以用相对较好的方法来计算表达之的值, 如下:
[taoge@localhost learn_shell]$ cat a.sh
#! /bin/bash
read n
i=1
sum=0
while [ $i -le $n ]
do
((sum+=i))
((i++))
done
echo $sum
[taoge@localhost learn_shell]$
[taoge@localhost learn_shell]$
[taoge@localhost learn_shell]$
[taoge@localhost learn_shell]$ ./a.sh
100
5050
[taoge@localhost learn_shell]$
好吧, 说完while, 我们说说until, 其实until跟while就是个反东西, 看程序:
[taoge@localhost learn_shell]$ cat a.sh
#! /bin/bash
read n
i=1
sum=0
until ! [ $i -le $n ]
do
((sum+=i))
((i++))
done
echo $sum
[taoge@localhost learn_shell]$
[taoge@localhost learn_shell]$
[taoge@localhost learn_shell]$
[taoge@localhost learn_shell]$ ./a.sh
100
5050
[taoge@localhost learn_shell]$
所以, 从这个意义上来讲, 我觉得until完全没有存在的必要了, 我们只需要认识它即可, 坚决不用它。
我们看看for, 这个还挺有意思的(颇有点C++11的范围for的意味, 当然Objective-C中也有), 且看:
[taoge@localhost learn_shell]$ cat a.sh
#! /bin/bash
read n
sum=0
for i in `seq $n`
do
((sum+=i))
done
echo $sum
[taoge@localhost learn_shell]$
[taoge@localhost learn_shell]$
[taoge@localhost learn_shell]$
[taoge@localhost learn_shell]$ ./a.sh
100
5050
[taoge@localhost learn_shell]$
另外, 我们知道C/C++中有continue和break, 那shell script怎么能少这么重要的功能呢? 用法与C/C++非常类似, 我就不具体介绍了。
好的, linux shell script的循环结构就先介绍到这里了。 晚安。