shell-条件测试(if case)

68 阅读1分钟

一 条件测试

1.1 test

test 测试文件的表达式 是否成立

  1. 格式1:test 条件表达式
  2. 格式2:[ 条件表达式 ]

ps:

  • 注意[]空格,否则会失败
  • 测试 是否成功使用 $? 返回值
  • [ 操作符 文件或目录 ]

文件测试常见选项:

常见的测试操作符含义
-d测试是否为目录(directory)
-e测试目录或文件是否存在(Exist)
-f测试是否为文件(File)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试当前用户是否有权限执行(eXcute)
-L测试是否为软连接文件
-nt判断文件A是否比文件B新
-ot判断文件A是否比文件B旧
-ef判断两个文件是否为同一文件

1.2 整数值比较

格式:
[ 整数1 操作符 整数2 ]

操作符含义
-eq等于(Equal)
-ne不等于(Not Equal)
-lt小于(Leser Than)
-gt大于(Greater Than)
-le小于或等于(Lesser or Equal)
-ge大于或等于(Greater or Equal)

1.3 字符串比较

格式:

 [ 字符串1 = 字符串2 ]       #判断是否相等
 [ 字符串1 != 字符串2 ]     #判断是否不等
 [ -z 字符串 ]              #判断字符串内容是否为空

操作符:

操作符含义
=字符串内容相同
!=字符串内容不同,!号表示相反的意思
-z字符串内容为空

1.4 逻辑测试

格式:

  1. [ 表达式1 ] 操作符 [ 表达式2 ]
  2. 命令1 操作符 命令2

操作符:

操作符作用
-a或&&逻辑与,而且的意思
-o或▕▕逻辑或,或者的意思
逻辑否

二 if语句

单分支结构

image.png

if 判断条件
then   条件为真的分支代码
fi

双分支结构

image.png

if 判断条件
then
 条件为真的分支代码
else
 条件为假的分支代码
fi


 
#/bin/bash
read -p "请输入yes确定重启:" TEST
if [ $TEST = "yes" ]
then
echo 系统即将重启
else
echo 没有输入yes,系统将不重启
fi

多分支结构

image.png

if 判断条件1
then
 条件1为真的分支代码
elif 判断条件2
then
 条件2为真的分支代码
elif 判断条件3;then
 条件3为真的分支代码
...
else
 以上条件都为假的分支代码
fi



read -p "请输入yes或no:" TEST
if [ $TEST = "yes" ]
   then
     echo 你输入的为$TEST!
elif [ $TEST = "no" ]
   then
      echo 你输入的为$TESTelse
   echo 你输入的${TEST}有错误,请重启输入yes或者no!  
fi


case语句

格式:

case 变量名称 in
模式1)
 命令序列
 ;;
模式2)
 程序段
 ;;
*)
  不包含第一个变量内容与第二个变量内容的其他程序执行段
  默认程序段
 ;;
esac

注意点:

  • case行首必须以单词“in”,每一模式必须以单个右括号")"结束

  • 双分号";;"表示命令序列的结束

  • 模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠|表示或,比如a|b

  • 最后的 )表示默认模式,其中的相当于通配符

    #不管输出大小写字母,都能输出yes或者no
    
    #!/bin/bash
    read -p "请输入yes或者no:" i
    case $i in
    [Yy]|[Yy][Ee][Ss])
    echo "你输入的yes正确"
    ;;
    [Nn]|[Nn][Oo])
    echo "你输入的no正确"
    ;;
    esac
    

echo

格式: echo 转义字符 *

转义符号含义
-n表示不换行输出
\e输出转义字符,将转义后的内容输出到屏幕上
\b转义后相当于按退格键,但前提是b后面存在字符: b表示删除前一个字符,\b\b表示删除前两个字 符
\c不换行输出,当\c后面存在字符时,后面的字符不会被输出
\n换行,被输出的字符从\n除开始另起一行
\f或\v换行,但是换行后的新行的开头位置连接着上一行的行尾
\t转以后表示插入tab,即横向制表符
\r光标移至行首,用后面的字符覆盖等长度的前面的字符