shell编程 - 条件测试


1. 条件测试格式

  • 简单条件测试
if [ condition ]
then 
  commands
fi

注意condition条件表达式在前后方括号之后和之前各有一个空格,否则会出现语法错误

  • 逻辑与条件测试
if [ condition1 ] && [ condition2 ]
then 
  commands
fi

两个条件表达式执行均为True,则执行if-then语句

  • 逻辑或条件测试
if [ condition1 ] || [ condition2 ]
then 
  commands
fi

两个条件表达式有一个执行为True,则执行if-then语句

  • 数学表达式条件测试
var1=10
if (( $var1 ** 2 > 100 ))
then 
  (( var2=$var1**2 ))
  echo "The square of $var1 is $var2"
fi

在双圆括号中可以执行高级的数学表达式

  • 字符串模式匹配条件测试
if [[ $USER == r* ]]
then 
  echo "Hello $USER"
else
  echo "Sorry, I do not know you"
fi
  • 在方括号之中执行高级字符串处理功能,当前用户名是否以r开头,双等号将右边视为一个模式*

2. 条件测试种类

  • 数值比较
  • 字符串比较
  • 文件比较

3. 数值比较

  • n1 -eq n2 检查n1是否与等于n2
  • n1 -ne n2 检查n1是否不等于n2
  • n1 -ge n2 检查n1是否大于等于n2
  • n1 -gt n2 检查n1是否大于n2
  • n1 -le n2 检查n1是否小于等于n2
  • n1 -lt n2 检查n1是否小于n2

4. 字符串比较

  • str1 = str2 检查str1是否和str2相同
  • str1 != str2 检查str1是否和str2不同
  • str1 < str2 检查str1是否比str2小
  • str1 > str2 检查str1是否比str2大
  • -n str1 检查str1的长度是否非0
  • -z str1 检查str1的长度是否为0

5. 文件比较

  • -d file 检查file是否存在并且是一个目录
  • -e file 检查file是否存在
  • -f file 检查file是否存在并且是一个文件
  • -r file 检查file是否存在并且可读
  • -s file 检查file是否存在并非空
  • -w file 检查file是否存在并且可写
  • -x file 检查file是否存在并且可执行
  • -O file 检查file是否存在并属当前用户所有
  • -G file 检查file是否存在并且默认组与当前用户相同
  • file1 -nt file2 检查file1是否比file2新
  • file1 -ot file2 检查file1是否比file2旧