• shell运算符


    Bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。

    原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

    expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

    例如,两个数相加:
    1. #!/bin/bash
    2. val=`expr 2 + 2`
    3. echo "Total value : $val"
    运行脚本输出:
    Total value : 4
    两点注意:
    • 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
    • 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

    算术运算符

    先来看一个使用算术运算符的例子:
    1. #!/bin/sh
    2. a=10
    3. b=20
    4. val=`expr $a + $b`
    5. echo "a + b : $val"
    6. val=`expr $a - $b`
    7. echo "a - b : $val"
    8. val=`expr $a * $b`
    9. echo "a * b : $val"
    10. val=`expr $b / $a`
    11. echo "b / a : $val"
    12. val=`expr $b % $a`
    13. echo "b % a : $val"
    14. if [ $a == $b ]
    15. then
    16. echo "a is equal to b"
    17. fi
    18. if [ $a != $b ]
    19. then
    20. echo "a is not equal to b"
    21. fi
    运行结果:
    a + b : 30
    a - b : -10
    a * b : 200
    b / a : 2
    b % a : 0
    a is not equal to b
    注意:
    • 乘号(*)前边必须加反斜杠()才能实现乘法运算;
    • if...then...fi 是条件语句,后续将会讲解。

    算术运算符列表
    运算符说明举例
    + 加法 `expr $a + $b` 结果为 30。
    - 减法 `expr $a - $b` 结果为 10。
    * 乘法 `expr $a * $b` 结果为  200。
    / 除法 `expr $b / $a` 结果为 2。
    % 取余 `expr $b % $a` 结果为 0。
    = 赋值 a=$b 将把变量 b 的值赋给 a。
    == 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false。
    != 不相等。用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。

    注意:条件表达式要放在方括号之间,并且要有空格,例如 [$a==$b] 是错误的,必须写成 [ $a == $b ]。

    关系运算符

    关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

    先来看一个关系运算符的例子:
    1. #!/bin/sh
    2. a=10
    3. b=20
    4. if [ $a -eq $b ]
    5. then
    6. echo "$a -eq $b : a is equal to b"
    7. else
    8. echo "$a -eq $b: a is not equal to b"
    9. fi
    10. if [ $a -ne $b ]
    11. then
    12. echo "$a -ne $b: a is not equal to b"
    13. else
    14. echo "$a -ne $b : a is equal to b"
    15. fi
    16. if [ $a -gt $b ]
    17. then
    18. echo "$a -gt $b: a is greater than b"
    19. else
    20. echo "$a -gt $b: a is not greater than b"
    21. fi
    22. if [ $a -lt $b ]
    23. then
    24. echo "$a -lt $b: a is less than b"
    25. else
    26. echo "$a -lt $b: a is not less than b"
    27. fi
    28. if [ $a -ge $b ]
    29. then
    30. echo "$a -ge $b: a is greater or equal to b"
    31. else
    32. echo "$a -ge $b: a is not greater or equal to b"
    33. fi
    34. if [ $a -le $b ]
    35. then
    36. echo "$a -le $b: a is less or equal to b"
    37. else
    38. echo "$a -le $b: a is not less or equal to b"
    39. fi
    运行结果:
    10 -eq 20: a is not equal to b
    10 -ne 20: a is not equal to b
    10 -gt 20: a is not greater than b
    10 -lt 20: a is less than b
    10 -ge 20: a is not greater or equal to b
    10 -le 20: a is less or  equal to b

    关系运算符列表
    运算符说明举例
    -eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 true。
    -ne 检测两个数是否相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
    -gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。
    -lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。
    -ge 检测左边的数是否大等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。
    -le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。

    布尔运算符

    先来看一个布尔运算符的例子:
    1. #!/bin/sh
    2. a=10
    3. b=20
    4. if [ $a != $b ]
    5. then
    6. echo "$a != $b : a is not equal to b"
    7. else
    8. echo "$a != $b: a is equal to b"
    9. fi
    10. if [ $a -lt 100 -a $b -gt 15 ]
    11. then
    12. echo "$a -lt 100 -a $b -gt 15 : returns true"
    13. else
    14. echo "$a -lt 100 -a $b -gt 15 : returns false"
    15. fi
    16. if [ $a -lt 100 -o $b -gt 100 ]
    17. then
    18. echo "$a -lt 100 -o $b -gt 100 : returns true"
    19. else
    20. echo "$a -lt 100 -o $b -gt 100 : returns false"
    21. fi
    22. if [ $a -lt 5 -o $b -gt 100 ]
    23. then
    24. echo "$a -lt 100 -o $b -gt 100 : returns true"
    25. else
    26. echo "$a -lt 100 -o $b -gt 100 : returns false"
    27. fi
    运行结果:
    10 != 20 : a is not equal to b
    10 -lt 100 -a 20 -gt 15 : returns true
    10 -lt 100 -o 20 -gt 100 : returns true
    10 -lt 5 -o 20 -gt 100 : returns false

    布尔运算符列表
    运算符说明举例
    ! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
    -o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
    -a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

    字符串运算符

    先来看一个例子:
    1. #!/bin/sh
    2. a="abc"
    3. b="efg"
    4. if [ $a = $b ]
    5. then
    6. echo "$a = $b : a is equal to b"
    7. else
    8. echo "$a = $b: a is not equal to b"
    9. fi
    10. if [ $a != $b ]
    11. then
    12. echo "$a != $b : a is not equal to b"
    13. else
    14. echo "$a != $b: a is equal to b"
    15. fi
    16. if [ -z $a ]
    17. then
    18. echo "-z $a : string length is zero"
    19. else
    20. echo "-z $a : string length is not zero"
    21. fi
    22. if [ -n $a ]
    23. then
    24. echo "-n $a : string length is not zero"
    25. else
    26. echo "-n $a : string length is zero"
    27. fi
    28. if [ $a ]
    29. then
    30. echo "$a : string is not empty"
    31. else
    32. echo "$a : string is empty"
    33. fi
    运行结果:
    abc = efg: a is not equal to b
    abc != efg : a is not equal to b
    -z abc : string length is not zero
    -n abc : string length is not zero
    abc : string is not empty

    字符串运算符列表
    运算符说明举例
    = 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
    != 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
    -z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
    -n 检测字符串长度是否为0,不为0返回 true。 [ -z $a ] 返回 true。
    str 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。

    文件测试运算符

    文件测试运算符用于检测 Unix 文件的各种属性。

    例如,变量 file 表示文件“/var/www/tutorialspoint/unix/test.sh”,它的大小为100字节,具有 rwx 权限。下面的代码,将检测该文件的各种属性:
    1. #!/bin/sh
    2. file="/var/www/tutorialspoint/unix/test.sh"
    3. if [ -r $file ]
    4. then
    5. echo "File has read access"
    6. else
    7. echo "File does not have read access"
    8. fi
    9. if [ -w $file ]
    10. then
    11. echo "File has write permission"
    12. else
    13. echo "File does not have write permission"
    14. fi
    15. if [ -x $file ]
    16. then
    17. echo "File has execute permission"
    18. else
    19. echo "File does not have execute permission"
    20. fi
    21. if [ -f $file ]
    22. then
    23. echo "File is an ordinary file"
    24. else
    25. echo "This is sepcial file"
    26. fi
    27. if [ -d $file ]
    28. then
    29. echo "File is a directory"
    30. else
    31. echo "This is not a directory"
    32. fi
    33. if [ -s $file ]
    34. then
    35. echo "File size is zero"
    36. else
    37. echo "File size is not zero"
    38. fi
    39. if [ -e $file ]
    40. then
    41. echo "File exists"
    42. else
    43. echo "File does not exist"
    44. fi
    运行结果:
    File has read access
    File has write permission
    File has execute permission
    File is an ordinary file
    This is not a directory
    File size is zero
    File exists

    文件测试运算符列表
    操作符说明举例
    -b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
    -c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
    -d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
    -f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
    -g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
    -k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
    -p file 检测文件是否是具名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
    -u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
    -r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
    -w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
    -x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
    -s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
    -e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。
     
  • 相关阅读:
    2018 ACM 网络选拔赛 徐州赛区
    2018 ACM 网络选拔赛 焦作赛区
    2018 ACM 网络选拔赛 沈阳赛区
    poj 2289 网络流 and 二分查找
    poj 2446 二分图最大匹配
    poj 1469 二分图最大匹配
    poj 3249 拓扑排序 and 动态规划
    poj 3687 拓扑排序
    poj 2585 拓扑排序
    poj 1094 拓扑排序
  • 原文地址:https://www.cnblogs.com/LvLoveYuForever/p/6441738.html
Copyright © 2020-2023  润新知