test EXPRESSION# 或[ EXPRESSION ]# 注意方括号内必须有空格
test 命令最常用于检查文件属性,以下是常用文件测试选项: | | |
|---|
| | [ -e file.txt ] |
| | [ -f /path/to/file ] |
| | [ -d /path/to/dir ] |
| | [ -r file.txt ] |
| | [ -w file.txt ] |
| | [ -x script.sh ] |
| | [ -s logfile ] |
| | [ -L symlink ] |
#!/bin/bashfile="/etc/passwd"if[-e"$file"];then echo"$file 存在" if[-r"$file"];then echo"并且可读" fielse echo"$file 不存在"fi
| | |
|---|
| | [ -z "$var" ] |
| | [ -n "$var" ] |
| | [ "$var1" = "$var2" ] |
| | [ "$var1" != "$var2" ] |
#!/bin/bashread-p"输入用户名: "usernameif[-z"$username"];then echo"错误:用户名不能为空" exit1elif["$username"="root"];then echo"警告:不建议使用root账户"else echo"欢迎, $username"fi
执行后,我们在终端输入 runoob,输出结果类似如下: | | |
|---|
| | [ "$a" -eq "$b" ] |
| | [ "$a" -ne "$b" ] |
| | [ "$a" -gt "$b" ] |
| | [ "$a" -ge "$b" ] |
| | [ "$a" -lt "$b" ] |
| | [ "$a" -le "$b" ] |
#!/bin/bashread-p"输入年龄: "ageif["$age"-lt0];then echo"年龄不能为负数"elif["$age"-lt18];then echo"未成年人"elif["$age"-ge18]&&["$age"-lt60];then echo"成年人"else echo"老年人"fi
| | |
|---|
| | [ ! -f "$file" ] |
| | [ "$a" -eq 1 -a "$b" -eq 2 ] |
| | [ "$a" -eq 1 -o "$b" -eq 2 ] |
[ "$a"-eq1]&&["$b"-eq2] # 与["$a"-eq1]||["$b"-eq2] # 或
- 支持模式匹配:[[ "$var" == *.txt ]]
- 支持正则表达式:[[ "$var" =~ ^[0-9]+$ ]]
if [["$file"==*.log]];then echo"这是日志文件"fiif(($count>10));then echo"数量超过10"fi
#!/bin/bashservice="nginx"ifsystemctl is-active--quiet"$service";then echo"$service 正在运行"else echo"$service 未运行" # 可以添加启动服务的命令fi
#!/bin/bashbackup_file="/backups/data_$(date +%Y%m%d).tar.gz"if[!-f"$backup_file"];then echo"错误:备份文件 $backup_file 不存在" exit1elif[!-s"$backup_file"];then echo"警告:备份文件为空"else echo"备份验证成功"fi
1.缺少空格:[ "$a"="$b" ] 是错误的,正确是 [ "$a" = "$b" ]2.未引用的变量:[ -f $file ] 应该为 [ -f "$file" ]3.混淆字符串和数值比较:使用 = 比较字符串,-eq 比较数值echo "测试表达式: [ $a -eq $b ]"[ "$a" -eq "$b" ] && echo "成立" || echo "不成立"