凝望长空 发表于 2012-02-16 23:13

Shell 循环语句用法小结

Shell 循环语句用法小结








   在写shell脚本时,常常会用到循环语句。这里简单总结下常用的3种循环语句,以便以后能快速地参考写出【哎,最近脑子不太好使了,在多种语言交叉编程时,常常切换不过来,犯低级错误】,废话不说,开始demo:





1、for

         主要用于:在已知序列里遍历元素
view plaincopyprint?#! /bin/sh -

if [ $# -ge 1 ]; then
      path=$@
else
      path=*.sh
fi

for i in $path
do
      ls -lh $i
done
#! /bin/sh -

if [ $# -ge 1 ]; then
      path=$@
else
      path=*.sh
fi

for i in $path
do
      ls -lh $i
done注意:for循环的in列表时可选的,如果省略,shell会遍历整个命令行参数,此时for i相当于 for i in "$@"




再给一个for的用法示例: view plaincopyprint?#! /bin/sh -

for i in `seq 1 9`
do
      echo $i
done
#! /bin/sh -

for i in `seq 1 9`
do
      echo $i
done注意:for in 可以和 `` 与 $() 合用,上面的for i in `seq 1 9`也等价与 for i in $(seq 1 9)


再给一个for的用法示例: view plaincopyprint?#! /bin/sh -

for i in {a..z}
do
      echo $i
done
#! /bin/sh -

for i in {a..z}
do
      echo $i
done注意:for in 的大括号{}具有自动补齐功能,大括号与要补齐的内容之间不能有空格,要补齐的内容首尾由两个..相连,其间不能有空格

再给个for的用法示例:
view plaincopyprint?#! /bin/sh -

for (( i=1; i<=10; i++ ))
do
      echo $i
done
#! /bin/sh -

for (( i=1; i<=10; i++ ))
do
      echo $i
done提醒:这个主要是用了(())




2、while

主要用于:当某条件成立时,一直执行 view plaincopyprint?#! /bin/sh -

cnt=9

while [ $cnt -ge0 ]
do
   echo$((cnt--))
done
#! /bin/sh -

cnt=9

while [ $cnt -ge0 ]
do
   echo$((cnt--))
done注意:1、算术运算,需要放在$(()) 的括号中

      2、对于变量的算术运算,在$(())中,变量前面不需要$




3、unitl

主要用于:当某条件成立时,停止执行
view plaincopyprint?#! /bin/sh -

cnt=9
until [ $cnt -lt 0 ]
do
      echo $cnt
      cnt=$((cnt - 1))
done
#! /bin/sh -

cnt=9
until [ $cnt -lt 0 ]
do
      echo $cnt
      cnt=$((cnt - 1))
done注意:给变量赋值时,前面不要加$




      判断语句,可以参考以前的blog:case语句用法小结 和 if语句用法小结

第一夫人 发表于 2012-02-16 23:13

谢谢分享

baggio36 发表于 2012-02-27 21:57

我是初学者 要是能把几个常用的循环语句都总结下就更好了 呵呵 多谢分享

freeterman 发表于 2012-03-03 18:49

:victory:
页: [1]
查看完整版本: Shell 循环语句用法小结