0,条件测试里面有3类:文件测试、数值比较、字符串比较
1,test 条件表达式
注意,这个语法不会返回错误,只会返回相应的值,具体例子见下面的图片。test -d /home 判断目录/home是否存在,存在返真,不存在返回假。
下面脚本的含义是,如果目录/var/mysql_back不存在,则创建该目录。
#!/usr/bin/bash
back_dir=/var/mysql_back
if ! test -d $back_dir; then
mkdir -p $back_dir
fi
2,[条件表达式]
需要注意的是,[ -d /home ]和test -d /home的功能是完全一样的,不同的test后面直接跟表达式就可以,而[]的左方括号是测试的命令(注意[是一个命令),右方括号]是[方括号所必须的参数。其实记住[条件表达式]是测试的作用就可以了。
文件测试 [ \d 目录 ] 测试目录是否存在
数值比较 [ $变量名 -eq|-ne 0 ] -eq 测试前面的变量等于0, -ne 测试前面的变量不等于0
字符串比较 [ $变量名 == 字符串] 测试判断变量名是否等于字符串
3,[[条件表达式]]
和[表达式]类似。[[]]和[]两个语句并、或运算时的语法是不相同的。[ 语句1 -a 语句2] [[ 语句1 && 语句2]] 测试语句1和语句2是真的?[ 语句1 -o 语句2] [[ 语句1 || 语句2]] 测试语句1和语句2是有一个是真的?
4,文件测试
[ -e dir|file ] 测试指定目录或者文件是否存在
[ -d dir ] 测试指定目录是否存在
[ -f file ] 测试文件是否存在
[ -r file ] 测试当前用户对该文件是否有读权限
[ -x file ] 测试当前用户对该文件是否有执行权限
[ -w file ] 测试当前用户对该文件是否有写权限
[ -L file ] 测试后面的文件是否是连接
5,数值比较
[ $A -gt 10 ] 测试A是否大于10
[ $A -lt 10 ] 测试A是否小于10
[ $A -eq 10 ] 测试A是否等于10
[ $A -ne 10 ] 测试A是否不等于10
[ $A -ge 10 ] 测试A是否大于等于10
[ $A -le 10 ] 测试A是否小于等于10
注意,上面这种语法可能不好记,可以使用c风格的语法。使用(()),在小括号中执行判断语句即可。
6,字符串比较
提示:使用双引号
比如命令[ "$USER" == "root" ]; echo $? 的含义是如果当前用户是root,输出0,否则输出1。这里需要注意的是如果前面的命令写成[ $USER == root ] 这样的话有可能会报语法错误,所以要习惯使用“”把字符串变量引起来,这样可以避免不必要的麻烦。
[ -z "$var" ] 测试变量var的长度是0?
[ -n ''$var" ] 测试变量var的长度不是0?
命令总结:
id 用户名;返回的是用户的信息,如果没有这个用户,自然会报错。
bash -n .sh文件;检查这个脚本文件的语法。