11.4 Shell_6_判断表达式

https://www.jianshu.com/p/ea61be326568

test

image
image
image
image
image
image

判断符号 []

[ -z "${HOME}" ] ; echo $?

必须要注意中括号的两端需要有空白字符来分隔喔! 假设我空白键使用“□”符号来表示,那么,在这些地方你都需要有空白键:

image
  • 在中括号 [] 内的每个元件都需要有空白键来分隔;
  • 在中括号内的变量,最好都以双引号括号起来;

错误示范

name="shark ops"
[ ${name} == "xiguatian" ]

会报错

bash: [: too many arguments

之前的是会这样的

[ ${name} == "xiguatian" ] 会变成 [ shark ops == "xiguatian" ]

所以应该写成下面这样

[ "${name}" == "xiguatian" ] 会变成 [ "shark ops" == "xiguatian" ]

心得

test命令进行测试

测试的标志 代表意义
1.关于文件名的“文件类型”判断,如test -e filename表示是否存在用echo $?去判断
-e 该“文件名”是否存在?(常用)
-f 该”文件名“是否存在且为文件(file)(常用)?
-d 该“文件名”是否存在且为目录(directory)(常用)
2.关于文件的权限检测 --
-r 检测文件名是否存在且具有“可读”的权限
-w 检测文件名是否存在且具有”可写“的权限
-x 检测文件名是否具有“可执行”的权限
-s 检测文件名是否存在且为“非空白文件”
3.两个文件之间的比较,如:test file1 -nt file2
-nt (newer than)判断file1是否比file2新
-ot (older than)判断file1是否比file2旧
-ef 判断file1与file2是否为同一个文件,可以用在hard link的判定上。主要判定两个文件是否均指向同一个inode
4.关于两个整数之间的判定,如:test n1 -eq n2
-eq 两数值相等(equal)
-ne 两数值不等(not equal)
-gt n1大于n2(greater than)
-lt n1小于n2(less than)
-ge n1大于等于n2(greater than or equal)
-le n1小于等于n2(less than or equal)
5.判定字符串的数据
test -z string 判断字符串是否为0?若string为空字串,则为true
test ! -z string 判定字符串是否为0?若string为空字符串,则为true
test str1 == str2 判定str1是否等于str2,若相等,则回传true
test str1 !=str2 判定str1是否不等于str2,若相等,则回传false
6.多重条件判定,例如:test -r filename -a -x filename
-a (and)两边条件同时成立,才会回传true,常用&&符号代替
-o (or)两边任何一条件成立,就会回传true,常用` `符号代替
取反

shell的条件判断格式[]

image.png
  • 中括号内的每个元件都需要用空白键分隔(否则会报错);
  • 括号内的变量最好都用双引号括起来
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容