gyts62 发表于 2018-8-30 06:18:45

第七章 shell学习之退出、测试、判断及操作

  退出状态
  $?记录了上一个命令的退出状态:
  0 运行成功
  1~125 运行失败
  126 找到命令但无法执行
  127 未找到要运行的命令
  >128 命令被系统强制结束
  测试
  两种方式:
  test expression
  [ expression ]
  注意[]的两边必须要空格
  比较条件为真返回0,假返回非0(C语言为真返回非0正整数,假返回0)
  算数比较运算符
  n1 -eq n2 等于返回0,不等于返回1
  n1 -gt n2
  n1 -ge n2
  n1 -le n2
  n1 -lt n2
  n1 -ne n2 不等于返回0,等于返回1
  例:
  # n1=15
  # [ "$n1" -eq 15 ]
  # echo $?
  0
  # test "$n1" -eq 15
  # echo $?
  0
  # [ $n1 -ne 15 ]
  # echo $?
  1
  # test $n1 -ne 15
  # echo $?
  1
  注意:只能比较整数,不能比较浮点数
  字符串运算符
  方式1:(只能用test运算符)
  -n string 测试字符串string是否不为空(不为空是真,值为0,为空值为1),-n为默认,可省略
  -z string 测试字符串string是否为空(为空是真,值为0,不为空值为1)
  方式2:
  string1=string2 测试string1是否与string2相同
  string1!=string2 测试string1是否与string2不同
  例:
  # str1="hello"
  # test -n "$str1"
  # echo $?
  0
  # test -z "$str1"
  # echo $?
  1
  # [ "$str1"!=" " ]
  # echo $?
  0
  # [ "$str1" -n " " ]    #方式1不能用于[]
  bash: [: -n: binary operator expected
  # test "$str1"!=" "   #方式2通用
  # echo $?
  0
  文件操作符
  test file_operator File
  [ file_operator file ]
  file_operator:
  -d 是否为目录
  -f 是否为普通文件
  -e 是否存在
  -r 是否可读
  -w 是否可写
  -x 是否可执行
  -s 长度是否不为0
  -L 是否符号化链接
  如:
  [ -d clc.txt ]
  test -d clc.txt
  echo $?
  逻辑运算符
  ! 非
  -a 与
  -o 或
  [ ! -e clc.txt ]   #clc.txt不存在为真(值为0)
  [ -e clc.sh -a -x clc.sh ]#clc.sh存在并且可执行则结果为真
  判断
  1.
  if expression
  then
  ...
  fi
  2.
  if expression; then
  ...
  fi
  3.
  if expression1
  then
  ...
  else
  ...
  fi
  4.
  if expression1
  then
  ...
  elif expression2
  then
  ...
  else
  ...
  fi
  expression为表达式,如[ -e clc.sh -a -x clc.sh ]
  case结构
  case variable in
  value1)
  ...;;
  value2)
  ...;;
  *)
  ...;;
  esac
  算术运算符
  +;-;*;/;%;**(幂运算)
  例:
  let "z=8/5*5"
  echo $z    #结果为5,因为8/5取整结果为5
  位运算符
  > 右移
  | 按位与
  ~ 按位非
  ^ 按位异或
  例:
  # let "value=~8"
  # echo $value
  -9
  # let "value=12|8"
  # echo $value
  12
  # value=8
  # let "value
页: [1]
查看完整版本: 第七章 shell学习之退出、测试、判断及操作