Linux条件判断(全)
Linux
·
1、语法形式(三种)。
- test 表达式
案例演示:
[root@docker01 ~]# test 1 -eq 1
[root@docker01 ~]# echo $?
0
[root@docker01 ~]# test 1 -eq 11
[root@docker01 ~]# echo $?
1
- [ 表达式 ]
案例演示:
[root@docker01 ~]# [ 1 -eq 1 ]
[root@docker01 ~]# echo $?
0
[root@docker01 ~]# [ 2 -eq 1 ]
[root@docker01 ~]# echo $?
1
- [[ 表达式 ]]
案例演示:
[root@docker01 ~]# [[ 1 -eq 1 ]]
[root@docker01 ~]# echo $?
0
[root@docker01 ~]# [[ 1 -eq 112 ]]
[root@docker01 ~]# echo $?
1
注意:上面三种方式,效果等价。
[] 和 [[]] 的区别在于
单个 [ ] 使用字符串对字符串必须加双引号
两个 [[ ]] 不用对字符串变量加双引号
两个 [[ ]] 里面可以使用 &&,||, 而单个不行
两个 [[ ]] 支持c风格
两个 [[ ]] 支持正则
- 类C风格的数值比较
整数比较:
注意:在(( ))中,=表示赋值;==表示判断
[root@server ~]# ((1==2));echo $?
[root@server ~]# ((1<2));echo $?
[root@server ~]# ((2>=1));echo $?
[root@server ~]# ((2!=1));echo $?
[root@server ~]# ((`id -u`==0));echo $?
[root@server ~]# ((a=123));echo $a
[root@server ~]# unset a
[root@server ~]# ((a==123));echo $?
2、使用判断的常用场景。
- 整数判断
常用参数:
判断参数 | 含义 |
---|---|
-eq == | 相等 |
-ne <> != | 不等 |
-gt | 大于 |
-lt | 小于 |
-ge | 大于等于 |
-le | 小于等于 |
- 字符串判断
常用参数:
判断参数 | 含义 |
---|---|
-z | 判断是否为空字符串,字符串长度为0则成立 |
-n | 判断是否为非空字符串,字符串长度不为0则成立 |
string1 = string2 | 判断字符串是否相等 |
string1 != string2 | 判断字符串是否相不等 |
- 文件类型判断
常用参数:
判断参数 | 含义 | 说明 |
---|---|---|
-e | 判断文件是否存在(link文件指向的也必须存在) | exists |
-f | 判断文件是否存在并且是一个普通文件 | file |
-d | 判断文件是否存在并且是一个目录 | directory |
-L | 判断文件是否存在并且是一个软连接文件 | soft link |
-b | 判断文件是否存在并且是一个块设备文件 | block |
-S | 判断文件是否存在并且是一个套接字文件 | socket |
-c | 判断文件是否存在并且是一个字符设备文件 | char |
-p | 判断文件是否存在并且是一个命名管道文件 | pipe |
-s | 判断文件是否存在并且是一个非空文件(有内容) | is not empty |
- 文件内容是否为空的判断
常用参数:
判断参数 | 含义 | 说明 |
---|---|---|
-s | 判断文件是否存在并且是一个非空文件(有内容) | is not empty |
- 文件权限判断
常用参数:
判断参数 | 含义 |
---|---|
-r | 当前用户对其是否可读 |
-w | 当前用户对其是否可写 |
-x | 当前用户对其是否可执行 |
-u | 是否有suid,高级权限冒险位 |
-g | 是否sgid,高级权限强制位 |
-k | 是否有t位,高级权限粘滞位 (创建者/root才能删除) |
- 文件新旧判断
常用参数:
说明:这里的新旧指的是文件的修改时间。
判断参数 | 含义 |
---|---|
file1 -nt file2 | 比较file1是否比file2新 |
file1 -ot file2 | 比较file1是否比file2旧 |
file1 -ef file2 | 比较是否为同一个文件,或者用于判断硬连接,是否指向同一个inode |
3、简单应用。
#!/bin/env bash
#该脚本用于判断输入的网站是否能够正常提供服务。
read -p "请输入网址:" addr;
wget -T 2 -t 2 -P ./tmp_files $addr &>/dev/null;
if [ $? -eq 0 ];then
echo "网址[$addr]可以正常访问";
rm -f ./tmp_files/index.*
else
echo "网址[$addr]不可以访问";
fi
补充:
if
中使用判断,还有个缺省模式,不使用test、[]、[[]]
可以直接对命令的执行结果进行判断。
if ls ;then echo 1111; fi;
更多推荐
已为社区贡献9条内容
所有评论(0)