linux shell script程序之循环结构简介

来源:互联网 发布:ansys软件界面 编辑:程序博客网 时间:2024/05/04 19:09

      在本文中, 我们来看看linux shell script的循环结构, 还是那句话, shell script虽然简单, 但一不小心就会出错, 比如, 我写出了如下的一个错误脚本:

#! /bin/bashread ni=1sum=0while [ $i -le $n ]do        $sum=$[ $sum + $i ]        $i=$[ $i + 1 ]doneecho $sum
     上面程序打算计算1-n的和, 但有问题, 因为赋值运算符的左边必须是左值啊, $sum和$i都是右值, 所以, 应该去掉$,  改后并运行, 结果如下:

[taoge@localhost learn_shell]$ cat a.sh #! /bin/bashread ni=1sum=0while [ $i -le $n ]do        sum=$[ $sum + $i ]        i=$[ $i + 1 ]doneecho $sum[taoge@localhost learn_shell]$ [taoge@localhost learn_shell]$ [taoge@localhost learn_shell]$ [taoge@localhost learn_shell]$ ./a.sh 1005050[taoge@localhost learn_shell]$ 

     下面, 我们用let来改改, 得到:

[taoge@localhost learn_shell]$ cat a.sh #! /bin/bashread ni=1sum=0while [ $i -le $n ]do        let sum=$sum+$i        let i=$i+1doneecho $sum[taoge@localhost learn_shell]$ [taoge@localhost learn_shell]$ [taoge@localhost learn_shell]$ [taoge@localhost learn_shell]$ ./a.sh 1005050[taoge@localhost learn_shell]$

     这个shell script赋个值还真麻烦, 跟C/C++完全没得比, 不过, 我们还是可以用相对较好的方法来计算表达之的值, 如下:

[taoge@localhost learn_shell]$ cat a.sh#! /bin/bashread ni=1sum=0while [ $i -le $n ]do((sum+=i))((i++))doneecho $sum[taoge@localhost learn_shell]$ [taoge@localhost learn_shell]$ [taoge@localhost learn_shell]$ [taoge@localhost learn_shell]$ ./a.sh1005050[taoge@localhost learn_shell]$


       好吧, 说完while, 我们说说until, 其实until跟while就是个反东西, 看程序:

[taoge@localhost learn_shell]$ cat a.sh#! /bin/bashread ni=1sum=0until ! [ $i -le $n ]do((sum+=i))((i++))doneecho $sum[taoge@localhost learn_shell]$ [taoge@localhost learn_shell]$ [taoge@localhost learn_shell]$ [taoge@localhost learn_shell]$ ./a.sh1005050[taoge@localhost learn_shell]$

       所以, 从这个意义上来讲, 我觉得until完全没有存在的必要了, 我们只需要认识它即可, 坚决不用它。


       我们看看for, 这个还挺有意思的(颇有点C++11的范围for的意味, 当然Objective-C中也有), 且看:

[taoge@localhost learn_shell]$ cat a.sh#! /bin/bashread nsum=0for i in `seq $n`do((sum+=i))doneecho $sum[taoge@localhost learn_shell]$ [taoge@localhost learn_shell]$ [taoge@localhost learn_shell]$ [taoge@localhost learn_shell]$ ./a.sh1005050[taoge@localhost learn_shell]$

      另外, 我们知道C/C++中有continue和break, 那shell script怎么能少这么重要的功能呢? 用法与C/C++非常类似, 我就不具体介绍了。


      好的, linux shell script的循环结构就先介绍到这里了。 晚安。







0 0