Decode360's Blog

业精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

  BlogJava :: 首页 :: 新随笔 :: 联系 ::  :: 管理 ::
  397 随笔 :: 33 文章 :: 29 评论 :: 0 Trackbacks
Linux shell程序设计(七).控制结构-2
 
    继续结构控制部分,今天学习一下while、for循环,和其他的一些操作。
 
 
四、while语句
 
    shell中有三种循环语句,分别是while语句、for语句、until语句
 
1、 while语句的格式为:
 
    while 测试条件
    do
    命令表
    done
 
    说明:先执行测试条件,如果为真,则进入循环体执行其中的命令,然后再做条件测试,直到测试条件为假时终止循环。
 
2、举例1:
 
    while [ $1 ]
    do
      if [ -f $1 ]
      then echo "display:$1"
           cat $1
      else echo "$1 is not a file name."
      fi
      shift
    done
 
    说明:程序对各个给定的位置参数,首先判断是否为普通文件,是则先是内容,不是则报错。每次循环一个位置,用shift移位,直至所有参数比较完成。
 
3、举例2:
 
    echo "Key in file name -> \c"
    read filename
    echo "Key in data:"
    while
      read x
    do
      echo $x >> $filename
    done
    cat $filename
 
    说明:用户输入一个数据,就添加到指定的文件中,直到用户按Enter键为止,最后显示文件内容。
 
 
五、until语句
 
1、until语句的格式:
 
    until 测试条件
    do
      命令表
    done
 
    说明:当测试条件为假时,才进入循环体,直至测试条件为真后终止循环。(跟while相反)
 
2、举例:
 
    until [ "$2" = "" ]
    do
      cp $1 $2
      shift 2
    done
    if [ "$1" != "" ]
    then echo "bad argument!"
    fi
 
    说明:如果第二个位置参数不为空,则将文件1复制给文件2,然后位置参数左移两位,直至没有第二个参数为止。在推出循环后再判断第一个参数是否为空,若为空则报错。
 
 
六、for语句
 
    for语句是最常用的循环结构语句,有两种方式:值表方式和算数表达式方式。
 
1、值表方式
 
    格式为:
    for 变量 [ in 值表 ]; do 命令表; done
 
    例如:
    for i in "${person[*]}"; do echo $i; done
 
    或者写为:
    for 变量 [ in 值表 ]
    do
      命令名
    done
    注:值表也可以是正则表达式
 
    示例:
    dir=$1 ; shift
    if [ -d $dir ]
    then
      cd $dir
      for name
      do
        if [ -f $name ]
        then cat $name
          echo "End of ${dir}/$name"
        else echo "Invalid file name :${dir}/$name"
        fi
      done
    else echo "Bad directory name :$dir"
    fi
 
    说明:如果第一个位置参数是合法的目录,则把后面各个位置参数对应的文件显示出来,若文件名不正确则显示错误信息。不过第一个位置参数不是合法目录,则先是目录名不对。
 
2、算数表达式方式
 
    格式为:
    for (( e1;e2;e3 )); do 命令表; done
 
    或者:
    for (( e1;e2;e3 ))
    do
      命令表
    done
 
    举例:
    for (( i=1;i<=$1;i++ ))
    do
      for (( j=1;j<=i;j++ ))
      do
        echo -n "*"
      done
      echo ""
    done
    echo "end!"
 
 
七、其他命令
 
1、break命令
 
    break命令可以使我们手动控制跳出循环。
 
    其语法是:
    break [n]
    其中n代表要跳出的循环层数,默认是1。若大于1,则从包含break语句的循环开始往外跳。
 
    举例:
    count=$#
    cmd=echo
    do
      cmd="$cmd \$$count"
      count=`expr $count -1`
      if [ $count -eq 0 ]
      then break
      fi
    done
    eval $cmd
    说明:该循环总是为真,唯一的出口是执行break语句。
 
2、continue语句
 
    continue语句可以跳过循环体中后面的语句,直接回到本层循环的开头,进行下一次循环。
 
    其语法是:
    continue [n]
    其中n表示从包含continue语句的最内层循环开始向外跳的层数。默认值为1。
 
    举例:
    for i in 1 2 3 4 5
    do
      if [ "$i" -eq 3 ]
      then continue
      else echo "$i"
      fi
    done
    说明:不打印3。
 
3、exit语句
 
    exit语句用于立即退出正在执行的shell脚本。
 
    其语法为:
    exit [n]
    其中n是设定的退出值。默认为最后一个命令的执行状态。
 
4、select语句
 
    select语句一般用于菜单的设计,它自动完成接受用户输入的整个过程,显示一组菜单项及用户的选择。
 
    其语法为:
    select identifier[in word...]
    do
      命令表
    done
 
    举例:
    PS3="Choice?"
    select choice in query add delete update list exit
    do
      case "$choice" in
      query) echo "Call query routine"
             break;;
      add) echo "Call add routine"
           break;;
      delete) echo "Call delete routine"   
              break;;
      update) echo "Call update routine"
              break;;
      list) echo "Call list routine"
            break;;
      exit) echo "Call exit routine"
            break;;
      esac
    done
    echo "Your choice is:$choice"
 
    其运行结果为:
    1)query
    2)add
    3)delete
    4)update
    5)list
    6)exit
    Choice? 2(用户输入)
    Call add routine
    Your choice is: add
 
    说明:列出1-6个选项菜单,给出提示接受用户选择。若in word省略,则默认按位置参数给定值。
 
 
posted on 2009-01-12 22:06 decode360 阅读(124) 评论(0)  编辑  收藏 所属分类: 03.Linux

只有注册用户登录后才能发表评论。


网站导航: