shell常用判断条件if

一、文件判断

-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 指向相同的设备和节点号则返回为真。

原文地址:https://www.cnblogs.com/menglingqian/p/6811718.html