Linux--shell编程--循环结构

while语句

  • 格式:
  • while 测试条件
    do
        命令表
    done
    
    # or
    
    while 测试条件; do
        命令表
    done

     

  • 执行过程:先进行条件测试,如果结果为真,则执行循环体(关键字do和done之间的命令表),然后再做条件测试...直到测试条件为假时,才终止while语句的执行。
#! /bin/bash
# while.sh
while [ $1 ]
do
    if [ -f $1 ];then
        echo -e "\ndisplay:$1"
        cat $1
    else
        echo "$1 is not a file name."
    fi
    shift
done
  • 这个程序对各个给定的位置参数,首先判断其是否为普通文件,若是,则显示其内容,否则,显示它不是文件的信息,每次循环处理一个位置参数$1,利用shift明林两个把后续位置参数左移。

until语句

  • 格式:
  • until 测试条件
    do
        命令表
    done
    
    # or
    
    until 测试条件; do
        命令表
    done

     

  • until与while语句比较相似,知识测试条件不同,就是说当测试条件为假时,才执行循环体中的命令表,直到测试条件为真时终止循环
  • #! /bin/bash
    # until.sh
    until [ -z "$2" ]; do
        cp $1 $2
        shift 2
    done
    
    if [ -n "$1" ]; then
        echo "bad parameter!"
    fi

     

  • 如果第二个位置参数不为空,就将文件1复制给文件2,然后将位置参数左移两个位置,接着重复上面过程,直至没有第二个位置参数为止,测试第一个位置参数,如果不为空,则打印参数不正确

for语句

  • for语句主要有两种使用方式:一种是值表方式,另一种是算术表达式方式
  • 值表方式:
    • 格式:
    • for 变量 [in 值表]
      do
          命令表
      done
      
      # or
      
      for 变量 [in 值表]; do 命令表; done

       

    • #! /bin/bash
      # for.sh
      for day in Monday Wednesday Friday Sunday
      do
          echo $day
      done

       

    • #! /bin/bash
      # for_test.sh
      week={Mon Tue Wed}
      for i in "${week[@]}"; do echo $i; done

       

#! /bin/bash
for 变量 in 文件正则表达式
do
    命令表
done



# 比如
for file in *.sh; do wc -w $file; done
  • 算术表达式方式
    • 格式:
    • for ((e1; e2; e3)); do 命令表; done
      
      
      # or
      
      
      for ((e1; e2; e3)); do
          命令表
      done

       

    • 用法就很像c语言中的循环,3个算术表达式(e1,e2,e3),没有填则默认为1(这里1为真,0为假)

break,continue,exit

  • break:退出循环体
    • 格式:break [n],n是一个整数,表示跳出几层循环,默认为1
    • #! /bin/bash
      # break.sh
      
      num=$1
      while true; do
          echo -n "$num"
          if ((--num == 0)); then
              break;
          fi
      done
      echo "bye"

       

  • continue:跳过本次循环在continue后面的语句,回到本层循环的开始,进行下一次循环
    • 格式:continue [n],其中n表示从包含continue的语句的那层循环体向外跳出几层循环,默认为1
    • #! /bin/bash
      # continue.sh
      
      num=$1
      for ((i=0; i

       

exit命令

  • exit命令的功能式立即退出,并设定退出状态(返回值)
  • 格式:exit [n]
  • 为显式给出n的话,则退出状态为最后一个命令的执行状态

select语句

  • select语句通常用于菜单的设计,它自动完成 接收用户输入的整个过程,包括显示一组菜单项以及读取用户的选择
  • 格式:
  • select identifier [in word...]
    do
        命令表
    done

     

  • 如果省略in word,那么参数identifier以位置参数作为给定的值
  • #! /bin/bash
    # select.sh
    
    PS3="Choice? "
    select choice in query add delete update 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;;
        exit)    echo "Call exit routine"; break;;
        esac
    done
    echo "you input $REPLY; your choice is: $choice"
    echo "bye"

     

  • PS1:命令行提示符,PS2:命令内提示符,PS3:用于select;REPLY是环境变量,将用户输入的值赋值给REPLY

 

 

 

 

你可能感兴趣的:(C-Linux环境编程)