zoukankan      html  css  js  c++  java
  • 流程控制语句

    顺序执行

    命令1 && 命令2:命令1执行成功,命令2才会执行

    $ mv /apps/bin /apps/dev/bin && rm -r /apps/bin
    #如果移动成功,参会删除。否则,删除语句不会执行

    命令1 || 命令2:命令1执行失败,命令2才会执行

    $ comet month_end.txt || exit
    如果脚本comet执行成功,就退出

    (命令1;命令2;. . .)

    括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。

    { 命令1;命令2;...;命令n;}

    代码块,又被称为内部组,这个结构事实上创建了一个匿名函数 。与小括号中的命令不同,大括号内的命令不会新开一个子shell运行,即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开,最后一个也必须有分号。{}的第一个命令和左括号之间必须要有一个空格。

    选择语句

    1. 基本语句

    if condition_statament
    then
         statament
    fi

    其中condition_statament执行后的状态是判断的依据,返回0表示执行成功,否则表示执行失败。通常由test语句的返回值给出。当然也可使用其他命令语句,执行成功则进入if内,否则跳过。(注意,符号“[”在bash中就是test命令,新版本中才强制使用“]”做结束)

    # 最原始的使用test,后改用 []
    if test 1 = 1
    then
        echo 原始的
    fi
    
    # 或者可以通过;分割语句在一行执行【if [ 1 = $num ];thenif [ 1 = $num ]
    then
        echo num's value is 1
    elif [ 2 = $num ]
    then   
        echo num's value is 2
    else
        echo false
    fi

    也可以在condition_statement中使用其他语句,比如这里ls命令执行失败,就跳过if语句了。

    if ls a;then
         echo echo
    fi

     2. 逻辑运算

    逻辑运算有两种方式:
    a) test命令内部的逻辑运算,其中[]之间就相当于test命令的简写
        使用-a、-o,分别表示and和or。
        使用!,表示not

    b) test命令之间的逻辑运算
        使用&&、||,分别表示and和or。

    注意“[[”是bash中的关键字,而不是test的命令。

    # 用||、&&
    if [[ 1 = 1 || 1 = 2 ]]
    then
        echo 或1
    fi
    
    if [ 1 = 1 ] || [ 1 = 2 ]
    then
        echo 或2
    fi
    # 用-a、-o
    if [ 1 = 1 -o 2 = 2 ]
    then
        echofi
    
    # 非用!
    if [ ! 1 = 2 ]
    then
        echofi

     3. 分支语句

    分支语句使用如下:

    read ff
    case $ff in
    1)
        echo select 1
        ;;
    yes|y)
        echo select yes
        ;;
    123*123)
        echo select 123*123
        ;;
    *)
        echo select any
        ;;
    esac

     4. 常用的判断条件(test命令中使用的)

    关系运算

    运算符号 代表意义
    = 等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串
    != 不等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串
    < 小于 应用于:整型比较 在[] 中,不能使用 表示字符串
    > 大于 应用于:整型比较 在[] 中,不能使用 表示字符串
    -eq 等于 应用于:整型比较
    -ne 不等于 应用于:整型比较
    -lt 小于 应用于:整型比较
    -gt 大于 应用于:整型比较
    -le 小于或等于 应用于:整型比较
    -ge 大于或等于 应用于:整型比较
    -a 双方都成立(and) 逻辑表达式 –a 逻辑表达式
    -o 单方成立(or) 逻辑表达式 –o 逻辑表达式
    -z 空字符串
    -n 非空字符串

    文件与文件夹判断

    逻辑卷标 表示意思
    1 关于文件与文件夹的检测逻辑卷标!
    -f 常用!检测『文件』是否存在 eg: if [ -f filename ]
    -d 常用!检测『文件夹』是否存在
    -b 检测是否为一个『 block 文件』
    -c 检测是否为一个『 character 文件』
    -S 检测是否为一个『 socket 标签文件』
    -L 检测是否为一个『 symbolic link 的文件』
    -e 检测『某个东西』是否存在!
    2. 关于程序的逻辑卷标!
    -G 检测是否由 GID 所执行的程序所拥有
    -O 检测是否由 UID 所执行的程序所拥有
    -p 检测是否为程序间传送信息的 name pipe 或是 FIFO (老实说,这个不太懂!)
    3. 关于文件的属性检测!
    -r 检测是否为可读的属性
    -w 检测是否为可以写入的属性
    -x 检测是否为可执行的属性
    -s 检测是否为『非空白文件』
    -u 检测是否具有『 SUID 』的属性
    -g 检测是否具有『 SGID 』的属性
    -k 检测是否具有『 sticky bit 』的属性
    4. 两个文件之间的判断与比较 ;例如[ test file1 -nt file2 ]
    -nt 第一个文件比第二个文件新
    -ot 第一个文件比第二个文件旧
    -ef 第一个文件与第二个文件为同一个文件( link 之类的文件)
    5. 逻辑的『和(and)』『或(or)』
    && 逻辑的 AND 的意思
    || 逻辑的 OR 的意思
  • 相关阅读:
    nginx的配置
    laravel入门
    Laravel5.6整合swagger
    安装arcgis10.2 for desktop需要microsoft.net framework 3.5 sp1或等效环境 解决方案
    Python 安装numpy-1.16.6+mkl-cp27-cp27m-win-amd64.whl和
    Leetcode-链表
    Java-排序-leetcode刷题
    async await要点
    nodejs查询数据库时,sql的空格和关键字问题
    输入mysql -u root -p 报错:ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
  • 原文地址:https://www.cnblogs.com/qiusuo/p/5570904.html
Copyright © 2011-2022 走看看