https://www.jianshu.com/p/ea61be326568
test
判断符号 []
[ -z "${HOME}" ] ; echo $?
必须要注意中括号的两端需要有空白字符来分隔喔! 假设我空白键使用“□”符号来表示,那么,在这些地方你都需要有空白键:
- 在中括号 [] 内的每个元件都需要有空白键来分隔;
- 在中括号内的变量,最好都以双引号括号起来;
错误示范
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的条件判断格式[]
- 中括号内的每个元件都需要用空白键分隔(否则会报错);
- 括号内的变量最好都用双引号括起来