shell条件判断

1.判断语法

a)  test 条件表达式

b)  [ 条件表达式 ]

c)  [[ 条件表达式 ]]        可匹配正则 =~

d)  判断后执行多个命令

[  条件1 ] && {
          命令1
          命令2
}

例如:

[ 1 -eq 2 ]&&{
    echo aa;
    echo bb;
}||{
    echo cc
    echo dd
}

 

man test去查看,很多的参数都用来进行条件判断

 

2.文件类型判断

-e 是否存在 不管是文件还是目录,只要存在,条件就成立
-f 是否为普通文件
-d 是否为目录
-S socket
-p pipe
-c character
-b block
-L 软link

 

3.文件内容判断

-s 是否为非空文件

! -s 表示空文件

 

4.文件权限判断

-r  当前用户对其是否可读
-w 当前用户对其是否可写
-x 当前用户对其是否可执行
-u 是否有suid
-g 是否sgid
-k 是否有t位

 

5.两个文件的比较判断

file1 -nt file2	 比较file1是否比file2新
file1 -ot file2	 比较file1是否比file2旧
file1 -ef file2	 比较是否为同一个文件,或者用于判断硬连接,是否指向同一个inode

 

6.整数之间的判断

-eq	 相等
-ne	 不等
-gt	 大于
-lt  	 小于
-ge	 大于等于
-le	小于等于

 

7.字符串之间的判断

-z  是否为空字符串 字符串长度为0,就成立
-n  是否为非空字符串 只要字符串非空,就是成立
string1 = string2    是否相等           --等号两边要有空格
string1 != string2   不等
! 结果取反

 

注意

[ “$1” = “abc” ]       —判断字符是否相等,变量也要用双引号

 

8.多重条件判断

逻辑判断符号:

-a 和 && 逻辑与

只有两个条件都成立,整个大条件才成立

[ 1 -eq 1 ] && [ 2 -ne 3 ]

[ 1 -eq 1 -a 2 -ne 3 ]

 

-o 和 || 逻辑或

只要其中一个条件成立,整个大条件就成立

[ 1 -eq 1 -o 2 -ne 2 ]

[ 1 -eq 1 ] || [ 2 -ne 2 ]

 

 

! 逻辑非 优先级最低

-a 优先级 比 -o 优先级要高

[[]] 和(())中可以使用&& || 不能使用 -a -o

9.实例

# [ $(id -u) -eq 0 ] && echo “当前是超级用户”            –id -u  username  可以查看用户id

$ [ $UID -eq 0 ] && echo “当前是超级用户” || echo “you不是超级用户”

# ((1==2));echo $?      –C语言风格的数值比较

# ((1>=2));echo $?

 

 

题目:输入一个路径,判断路径是否存在,而且输出是文件还是目录,如果是链接文件,还得输出是有效的连接还是无效的连接

思路:链接文件也属于文件,所以先判断链接文件,再去判断是否为文件

 #!/bin/bash
read -p "Input your path:" path
if [ -e $path -a -L $path ];then 
    echo "$0 is link file"
elif [ ! -e $path ] && [ -L $path ];then
    echo "$0 is not effctive link file"
elif [ -d $path ];then
    echo "$0 is a dirctory"
elif [ -f $path ];then
    echo " $0 is file"
else
    echo "$0 is other file"
fi

ls -L  dir                   -L可以判断软链接

–无效链接用-e判断会不存在

-L   如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录;

Leave a Reply

邮箱地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>