q456123 发表于 2018-8-23 07:33:46

shell 条件测试总结

  条件测试:推荐使用格式2
  格式1:   test            man test查看相关帮助
  格式2:   []
  格式3:   [[]]
  说明:在[[]]中可以使用通配符进行模式匹配 && ||>< 等操作符可以应用于[[]]中,但不能应用于[]中
  # test -f file && echo 1 || echo 0
  0
  # touch file
  # test -f file && echo 1 || echo 0
  1
  # test ! -f file && echo 1 || echo 0
  0
  # arg="martin"
  # test -z "$arg" && echo 1|| echo 0
  0
  # [ -f file ]&& echo 1 || echo 0
  0
  # [[ -f file && -d dir ]]&& echo 1 || echo 0
  0
  文件测试操作符
  -ffile
  -ddirrctory
  -ssize   文件存在且不为空则为真
  -eexist可以是文件也可以是目录
  -rread
  -wwrite
  -xexcute..
  -Llink
  f1 -nt f2    newer than 若文件f1比文件f2新则为真
  f1-ot f2   older than
  # mkdir martin
  # [ -f martin ]&& echo 1 || echo 0
  0
  # [ -d martin ]&& echo 1 || echo 0
  1
  # [ -e martin ]&& echo 1 || echo 0
  1
  常用字符串测试操作符
  -z"字符串"   若长度为0则为真, -z 可以理解为 zero
  -n"字符串"   若长度不为0则为真, -n 可以理解为 no zero
  "串1"="串2"    若串1等于串2则为真,可使用== 代替=
  "串1"!="串2"    若串1不于串2则为真,但不能使用 !==代替 !=
  字符串或字符串变量比较都要加双引号再比较
  字符串比较,比较符号两端最好有空格,多参考系统脚本
  # sed -n '30,31p' /etc/init.d/network
  # Check that networking is up.
  [ "${NETWORKING}" = "no" ] && exit 6
  # martin="hello"
  # [ "${martin}" = "hello" ]&& echo 1 || echo 0
  1
  # [ "${martin}" = "hello123" ]&& echo 1 || echo 0
  0
  # [ -n "abc" ]&& echo 1 || echo 0
  1
  # [ -n "" ]&& echo 1 || echo 0
  0

  # [ 12 -eq 13 ]&&echo 1 || echo 0
  0
  # [ 12 -lt 13 ]&&echo 1 || echo 0
  1
  # [ 12 -gt 13 ]&&echo 1 || echo 0
  0
  # [[ 12 > 13 ]]&&echo 1 || echo 0
  0
  # [[ 12 < 13 ]]&&echo 1 || echo 0
  1
  逻辑操作符
  在[]中使用的逻辑操作符       在[[]]中使用的逻辑操作符      说明
  -a                               &&                        and
  -o ||             or
  !                                 !                        not   取反
  # [ -f "$f1" -a -f "$f2" ]&& echo 1 || echo 0
  1
  观察系统脚本 nfs
  # Source networking configuration.
  [ -f /etc/sysconfig/network ] &&. /etc/sysconfig/network
  # sed -n '87,90p' /etc/init.d/nfs
  [ "$NFSD_MODULE" != "noload" -a -x /sbin/modprobe ] && {
  /sbin/modprobe nfsd
  [ -n "$RDMA_PORT" ] && /sbin/modprobe svcrdma
  }

页: [1]
查看完整版本: shell 条件测试总结