zoukankan      html  css  js  c++  java
  • shell脚本之if语句

    一、前言

    结构化编程中,主要有三种结构:顺序、分支、循环。由此可见分支判断的重要性。

    而且在shell编程中往往会遇到进行判断的情况,比如:判断文件是否存在、目录是否存在等等。

    二、if语句的结构

    if [ 条件 ];
    then
        ...
    elif [ 条件 ];
    then ...
    else ... fi

    三、shell中的分支判断

    shell中的判断有以下几种:

    1.字符串判断

    str1 = str2 当两个串有相同内容时为真
    str1 != str2 当两个串内容不同时为真
    -n str1 当串的长度大于0时为真
    -z str1 当串的长度为0是为真
    str1 当串为非空时为真

    2.数字判断

    n1 -eq n2 两数相等为真
    n1 -ne n2 两数不等为真
    n1 -gt n2 n1大于n2为真
    n1 -ge n2 n1大于等于n2为真
    n1 -lt n2 n1小于n2为真
    n1 -le n2 n1小于等于n2为真

    3.文件判断

    -r file 文件可读为真
    -w file 文件可写为真
    -x file 文件可执行为真
    -f file 文件为普通文件为真
    -d file 文件为目录文件为真
    -c file 文件为字符特殊文件为真
    -b file 文件为块特殊文件为真
    -s file 文件为链接文件为真
    -t file 当文件描述符指定的设备为终端时为真

    4.组合

    -a 与
    -o 或
    !  非

    5.注意

    今天写了个脚本,运行的时候一直出错:

    if [[ $1 = 'DEBUG' ]]; then
        CMD="make clean;make COMFLAG='-D__LINUX__ ' DEBUGFLAG='-g'"
    elif [[ $1 = 'RELEASE' ]]; then
        CMD="make clean;make COMFLAG='-D__LINUX__ '"
    else
        echo "Error parameter!"
        exit
    fi

    当条件处使用的是: if [ $1 = 'DEBUG' ] 时,不加参数直接运行总是报错:unary operator expected

    原因是当没有参数时,该行变为: if [ = 'DEBUG' ] 那么按照语法来说,'['和'DEBUG'是肯定不相等的,这样前面就少了一个'[',所以报错了。

  • 相关阅读:
    Windows Phone 8 开发环境搭建
    常用正则表达式大全分享
    ios 使用NSRegularExpression解析正则表达式
    大整数类BIGN的设计与实现 C++高精度模板
    CODEVS_1227 方格取数2 网络流 最小费用流 拆点
    CODEVS_1034 家园 网络流 最大流
    CODEVS_1033 蚯蚓的游戏问题 网络流 最小费用流 拆点
    HDU_4770 Lights Against Dudely 状压+剪枝
    CODEVS_2144 砝码称重 2 折半搜索+二分查找+哈希
    CODEVS_1074 食物链
  • 原文地址:https://www.cnblogs.com/lit10050528/p/4748742.html
Copyright © 2011-2022 走看看