本文承接上文,主要摘记了Shell运算有关的部分。

Shell介绍

运算和运算符

运算

Bash本身不支持数学运算,它是通过其他命令(函数)来实现的,例如:awkexpr,常用expr。expr支持的运算有+,-,*,/,%,==,!=

注意

Shell运算本质上是通过命令(函数)实现的,所以

1. 想要赋值给一个变量,只能通过`变量转化`实现。
2. 表达式和运算符之间要有空格(本质上是一个个参数)

运算符

注意表达式和运算符之间必须要有空格

  • 关系运算符

    1
    2
    3
    4
    -eq #两边是否相等
    -ne #两边是否不等
    -gt/-lt #大于/小于
    -ge/-le #大于等于/小于等于
  • 逻辑运算符

    1
    2
    3
    ! #非运算
    -o # or,或运算
    -a # and,与运算
  • 字符串运算符

    1
    2
    3
    4
    5
    =	字符串是否相等。	[ $a = $b ] 返回 false。
    != 字符串是否不相等。 [ $a != $b ] 返回 true。
    -z 字符串长度是否为0。 [ -z $a ] 返回 false。
    -n 字符串长度是否不为0。[ -n $a ] 返回 true。
    str 检测字符串是否不为空。[ $a ] 返回 true。
  • 文件测试运算符

    1
    2
    3
    4
    5
    6
    7
    -d file 是否是目录文件
    -f file 是否为普通文件,非块/字符设备文件,非目录

    -r/-w/-x file 是否为可读/写/操作文件

    -s file 文件是否不为空(文件大小大于0)
    -e file 文件是否存在

条件控制

判断语句

  • if语句

    格式:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >if [ expression ]
    >then
    > 语句..
    >elif [ expression ]
    >then
    > 语句..
    >else
    > 语句..
    >if
    >

    注意:

    1. expression 和方括号([ ])之间必须有空格
    2. then 必须另起一行或者使用.. [ ... ]; then ..格式;逻辑语句必须另起一行写

    一些简单的if语句,也可以使用&&逻辑替换,具体语法如下:

    1
    2
    > [ expression ] && command 
    >
  • case语句 (相当于其他语言的switch语句)

    格式:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    > case 取值 in
    > 模式1)
    > 语句
    > ;;
    > 模式2)
    > 语句
    > ;;
    > *)
    > 语句
    > ;;
    > esac
    >
    1. 取值可以为变量,也可以为常量
    2. 模式必须以)结束,模式可以使用|(或)组合,*)表示其他,相当于switch中的defualt。
    3. ;; 相当于switch的break,表示命令结束,注意;;必须另起一行。
  • while语句

    格式:

    1
    2
    3
    4
    5
    > while [ expression ]
    > do
    > 语句
    > done
    >

    表示当expression为true时,执行语句

  • until语句

    格式等同于while,不同的是它在expression为false时运行语句

  • 其它

    • break,break n 跳出,跳出n层循环,必须另起一行
    • continue 跳出本次循环,必须另起一行