一、文件判断
-r file 用户可读为真
-w file 用户可写为真
-x file 用户可执行为真
-f file 文件为正规文件为真
-d file 文件为目录为真
-c file 文件为字符特殊文件为真
-b file 文件为块特殊文件为真
-s file 文件大小非0时为真
-t file 当文件描述符(默认为1)指定的设备为终端时为真
判断目录是否存在,不存在创建目录。
[root@test ~]# cat shell.sh #!/bin/sh file_shell="/shell" if [ ! -d "$file_shell" ];then mkdir "$file_shell" if [ $? -eq 0 ];then echo "创建目录$file_shell成功!" fi fi [root@test ~]# sh shell.sh 创建目录/shell成功! [root@test /]# ls -lt 总用量 94 drwxr-xr-x. 7 root root 0 5月 5 2017 selinux drwxr-xr-x. 13 root root 0 5月 5 2017 sys dr-xr-xr-x. 98 root root 0 5月 5 2017 proc drwxr-xr-x. 2 root root 4096 5月 5 09:59 shell dr-xr-x---. 3 root root 4096 5月 5 09:56 root drwxr-xr-x. 17 root root 3680 5月 5 09:41 dev drwxr-xr-x. 72 root root 4096 5月 5 09:41 etc
判断根目录下的shell目录是否有执行权限,没有则赋予执行权限。
[root@test ~]# cat shell.sh #!/bin/sh file_shell="/root/shell" if [ ! -x "$file_shell" ]; then echo "$file_shell没有执行权限!" chmod +x "$file_shell" if [ $? -eq 0 ];then echo "给$file_shell添加执行权限成功!" fi fi [root@test ~]# ls -lh /shell/ 总用量 4.0K -rw-r--r--. 1 root root 71 5月 5 10:08 test.sh [root@test ~]#
二、数字判断
int1 -eq int2 两数相等为真
int1 -ne int2 两数不等为真
int1 -gt int2 int1大于int2为真
int1 -ge int2 int1大于等于int2为真
int1 -lt int2 int1小于int2为真
int1 -le int2 int1小于等于int2为真
三、字符串判断
str1 = str2 当两个串有相同内容、长度时为真
str1 != str2 当串str1和str2不等时为真
-n str1 当串的长度大于0时为真(串非空)
-z str1 当串的长度为0时为真(空串)
str1 当串str1为非空时为真
四、复杂逻辑判断
-a 与
-o 或
! 非
变量a等于aa且变量b等于bb 或者 变量c等于cc且变量d等于dd 这样的条件成立的话,输出success
[root@test ~]# sh shell.sh success [root@test ~]# cat shell.sh #!/bin/shell a="aa" b="bb" c="cc" d="dd" if [ $a = "aa" -a $b = "bb" ] || [$c = "cc" -a $d = "dd" ]; then echo "success" fi
五、常用参数,文件/目录判断
[ -a FILE ] 如果 FILE 存在则为真。
[ -b FILE ] 如果 FILE 存在且是一个块文件则返回为真。
[ -c FILE ] 如果 FILE 存在且是一个字符文件则返回为真。
[ -d FILE ] 如果 FILE 存在且是一个目录则返回为真。
[ -e FILE ] 如果 指定的文件或目录存在时返回为真。
[ -f FILE ] 如果 FILE 存在且是一个普通文件则返回为真。
[ -g FILE ] 如果 FILE 存在且设置了SGID则返回为真。
[ -h FILE ] 如果 FILE 存在且是一个符号符号链接文件则返回为真。(该选项在一些老系统上无效)
[ -k FILE ] 如果 FILE 存在且已经设置了冒险位则返回为真。
[ -p FILE ] 如果 FILE 存并且是命令管道时返回为真。
[ -r FILE ] 如果 FILE 存在且是可读的则返回为真。
[ -s FILE ] 如果 FILE 存在且大小非0时为真则返回为真。
[ -u FILE ] 如果 FILE 存在且设置了SUID位时返回为真。
[ -w FILE ] 如果 FILE 存在且是可写的则返回为真。(一个目录为了它的内容被访问必然是可执行的)
[ -x FILE ] 如果 FILE 存在且是可执行的则返回为真。
[ -O FILE ] 如果 FILE 存在且属有效用户ID则返回为真。
[ -G FILE ] 如果 FILE 存在且默认组为当前组则返回为真。(只检查系统默认组)
[ -L FILE ] 如果 FILE 存在且是一个符号连接则返回为真。
[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则返回为真。
[ -S FILE ] 如果 FILE 存在且是一个套接字则返回为真。
[ FILE1 -nt FILE2 ] 如果 FILE1 比 FILE2 新, 或者 FILE1 存在但是 FILE2 不存在则返回为真。
[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 老, 或者 FILE2 存在但是 FILE1 不存在则返回为真。
[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则返回为真。