🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# **一、条件表达式** ## **1.语法介绍** | 表达式 | 说明 | | --- | --- | | test 表达式 | test命令进行条件测试| | [ 表达式 ] | 单中括号方式,功能同test命令,推荐| | [[ 表达式 ]] | 双中括号,前两种的升级版| | ((表达式)) | 双小括号,一般用于if语句| > 双中括号可以使用通配符 &&、||、<、>等可以用于双中括号,不能用于单中括号 单中括号中用-a、-o、-gt、-lt代替 整数的关系运算也可以用双小括号 中括号里表达式前后都需要有空格 ## **2.用法和小结** ### 1) 普通用法 ``` test -f /etc/passwd && echo 1 || echo 0 [ -f /etc/passwd ] && echo 1 || echo 0 [[ -f /etc/passwd ]] && echo 1 || echo 0 ((3>2)) && echo 1 || echo 0 ``` 可以只写一半的条件语句,例如只写为真、为假时怎么操作 ``` test -f /etc/passwd && echo 1 test -f /etc/passwd || echo 0 ``` ### 2) 扩展用法 如果需要执行的命令有多条,可以用下面的扩展语法 ``` [ 条件1 ] &&{ 命令1 命令2 命令3 } ``` # **二、文件测试操作符** ## **1. 文件操作符介绍** | 操作符 | 操作符说明 | | --- | --- | |-d |文件存在且为目录| |-f |文件存在且为普通文件| |-e |文件存在,不管是什么文件类型| |-r |文件存在且可读| |-w |文件存在且可写| -x |文件存在且可执行| |-s |文件存在且大小不为0| |-L |文件存在且为链接文件| |f1 -nt -f2 |前面的文件比后面的文件新| |f1 -ot -f2 |前面的文件比后面的文件旧| > 以上文件操作符对[]、[[]]、test三者通用 读写执行权限并不全看文件属性,而是要结合实际用户,如root在没有读写权限时也能读写 ## **2. 应用举例** ``` [ -f /etc/passwd ] && echo 1||echo 0 [ -d /etc/passwd ] && echo 1||echo 0 [ -e /etc/passwd ] && echo 1||echo 0 [ -r /etc/passwd ] && echo 1||echo 0 [ -x /etc/passwd ] && echo 1||echo 0 [ -w /etc/passwd ] && echo 1||echo 0 [ -L /etc/passwd ] && echo 1||echo 0 ``` # **三、字符串测试操作符** ## **1. 操作符介绍** | 操作符 | 操作符说明 | | --- | --- | |-n "字符串" |若字符串长度不为0则表达式成立| |-z "字符串" |若字符串长度为0则表达式成立| |"串1" = "串2" |若字符串1等于字符串2则表达式成立| |"串1" != "串2" |若字符串1不等于字符串2则表达式成立| >对字符串的测试一定要将字符串加双引号后再比较 比较符号(如=和!=)两端一定要有空格 ## **2. 简单案例演示** ``` [ -n "" ] && echo 1 || echo 0 [ -z "" ] && echo 1 || echo 0 [ "abc" = "abc" ] && echo 1 || echo 0 [ "abc" != "abc" ] && echo 1 || echo 0 ``` # **四、整数比较操作符和逻辑操作符** ## **1. 操作符介绍** | []和test中 | (())和[[]]中 | 说明| | --- | --- | --- | | -eq| ==或=| 等于 (equal)| | -ne| != | 不等于 (not equal)| | -gt | > | 大于 (greater than)| | -ge| >= | 大于等于 (greater equal)| | -lt | < | 小于 (less than)| | -le| <= | 小于等于 (less equal)| > =和!=也可以在[]中做比较实用,但是需要转义 -gt和-lt也能在[[]]中使用,但不建议 比较符号两端也要有空格 ## **2. 逻辑操作符介绍** | []和test中 | (())和[[]]中 | 说明| | --- | --- | --- | | -a | && | and,与 | | -o |` || ` | or,或 | | ! | ! | not,非 | > `连接两个[]或[[]]的表达式可以用&&或||` -a和&&,需要两端为真才为真 -o和||,只需要任意一段为真就为真` ### **3.[]、[[]]、(())用法小结** ![[]、[[]]、(())用法总结](https://www.github.com/noah-luo/imags/raw/master/year/1544705211920.png)