shell脚本-循环选择语句

过程式编程语言:
顺序执行
选择执行
循环执行
注:条件中的变量,可以在执行语句中使用,不用在加上"$"。

if语句

    根据命令的退出状态来执行命令
    单分支
        if  判断条件;then
            条件为真的分支代码
        fi
    双分支
        if  判断条件; then
            条件为真的分支代码
        else
            条件为假的分支代码
        fi
    多分支
        if  判断条件 1 ; then
            条件为真的分支代码
        elif  判断条件 2 ; then
            条件为真的分支代码
        elif  判断条件 3 ; then
            条件为真的分支代码
        else
            以上条件都为假的分支代码
        fi
        逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if 语句

case 语句

    case用法:
        case 变量引用 in
        PAT1)
            分支1
            ;;
        PAT2)
            分支2
            ;;
            ...
        *)
            默认分支
            ;;
        esac
    case 支持glob 风格的通配符:
        *:  任意长度任意字符
        ?:  任意单个字符
        []:指定范围内的任意单个字符
        a|b: a 或b

for语句

    for  变量名 in 列表;do
        循环体
    done
        依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体;  直到列表中的元素耗尽,循环结束。
    or
    for ((exp1;exp2;exp3)); do
        COMMANDS
    done
        控制变量初始化:仅在运行到循环代码段时执行一次
        控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断
    列表生成方式:
        直接给出列表
        整数列表:
            (a) {start..end}
            (b) $(seq [start [step]] end)==`        `
        返回列表的命令
            $(COMMAND)
        使用glob,如:*.sh
        变量引用;
            $@, $*

while语句

    while CONDITION; do
        循环体
    done
    CONDITION:
        循环控制条件,进入循环之前,先做一次判断,每一次循环之后会再次做判断。
        条件为"true" ,则执行一次循环,直到条件测试状态为"false" 终止循环。
        CONDTION 一般应该有循环控制变量,而此变量的值会在循环体不断地被修正。
    进入条件:
        CONDITION 为true
    退出条件:
        CONDITION 为false
    特殊用法
        遍历文件的每一行
        while read line(任意); do
            循环体
        done < /PATH/FROM/SOMEFILE
        or
        命令、文件或其他(标准输出) |while read line; do
            循环体
        done 
        依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line

until语句

    until CONDITION; do
        循环体
    done
    CONDITION:
        循环控制条件,进入循环之前,先做一次判断,每一次循环之后会再次做判断。
        条件为"false" ,则执行一次循环,直到条件测试状态为"true" 终止循环。
        CONDTION 一般应该有循环控制变量,而此变量的值会在循环体不断地被修正。
    进入条件: 
        CONDITION  为false
    退出条件: 
        CONDITION  为true

控制语句

    continue
        用于循环体中,直接继续下个循环。
        continue [N],提前结束第N层的本轮循环,而直接进入下一轮判断,最内层为第1层。
    break
        用于循环体中,退出整个循环。
        break [N],提前结束第N层循环,最内层为第1层。
    shift
        用于将参量列表list左移指定次数,缺省为左移一次。
        shift [n],移动N个位置,参量列表list 一旦被移动,最左端的那个参数就从列表中删除。
        while 到循环遍历位置参量列表时,常用到 shift。
            $1=a,  $2=b,  $c=d
            shift
            $1=b,  $2=d
            shift
            $1=d
    wait
        用于等待命令执行结束,并exit 退出

select语句

    select 变量名 in LIST ; do
        循环体命令
    done
    select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示 PS3 提示符,等待用户输入。
    用户输入菜单列表中的某个数字,执行相应的命令。
    用户输入被保存在内置变量 REPLY中。
        PS3="INPUT:"
        select menu in bai hei hong lv;do
            echo $menu
        done
    selectcase的对比
        select 是个无限循环,因此要记住用 break令退出循环,或用 exit命令终止脚本,也可以按 ctrl+c退出循环。
        select 经常和 case 联合使用
        与for循环类似,可以省略in LIST,此时使用位置参量。

trap信号捕捉

    trap ' 触发指令'  信号
        自定义进程收到系统发出的指定信号后,将执行触发指令,而不会执行原操作。
    trap ' '  信号
        忽略信号的操作
    trap '-'  信号
        恢复原信号的操作
    trap -p
        列出自定义信号操作
    trap 示例
        #!/bin/bash
        trap 'echo “signal:SIGINT"' int
        trap -p
        for((i=0;i<=10;i++))
        do
                sleep 1
                echo $i
        done
        trap '' int
        trap -p
        for((i=11;i<=20;i++))
        do
                sleep 1
                echo $i
        done
        trap '-' int
        trap -p
        for((i=21;i<=30;i++))
        do
                sleep 1
                echo $i
        done

猜你喜欢

转载自blog.csdn.net/bbwangj/article/details/80572570