• 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
  • 相关阅读:
    Vim
    一文搞定Samba云服务器配置(阿里云)CentOS8.3
    第四课 婴儿是如何思考的 思维的发展历程
    C++/VS基础篇
    Windows下Qt VS 打包程序 到他人电脑安装运行出现的问题
    第三课 斯金纳
    第二课基础 弗洛伊德
    C++中头文件和实现文件的关系
    字符串 数字 转换
    Ucore lab1实验报告
  • 原文地址:https://www.cnblogs.com/fungitive/p/9136118.html
Copyright © 2020-2023  润新知