条件表达式
文件测试
一般使用
[ ]
表示,也可以使用test
,结果为真则$?
返回0
,man test
可以查看所有的表达式
[root@home ~]# [ -f test.sh ]
[root@home ~]# echo $?
0
[root@home ~]# [ -d test.sh ]
[root@home ~]# echo $?
1
[root@home ~]# test -f test.sh
[root@home ~]# echo $?
0
[root@home ~]# test -d test.sh
[root@home ~]# echo $?
1
- -e : 存在则为真
- -f : 是否为文件
- -d : 是否为目录是否存在
- -x : 是否可执行
- -r : 是否可读
- -w : 是否可写
更多测试和应用
[root@home ~]# [ -f /etc/hostssss ] && echo ok || echo error
error
[root@home ~]# [ -d /etc/ ] && echo ok || echo error
ok
#可以通过判断目录是否存在来创建目录
[root@home ~]# [ -d /backup/1997sty ] && echo ok || mkdir -p /backup/1997sty
[root@home ~]# [ -d /backup/1997sty ] && echo ok || mkdir -p /backup/1997sty
ok
[root@home ~]# tree /backup/
/backup/
└── 1997sty
1 directory, 0 files
[root@home ~]# [ -d /backup ] && action "Nginx start is" /bin/true || action "Nginx start is" /bin/false
-bash: action: 未找到命令
[root@home ~]# . /etc/init.d/functions
[root@home ~]# [ -d /backup ] && action "Nginx start is" /bin/true || action "Nginx start is" /bin/false
Nginx start is [失败]
#/etc/init.d/functions是函数库判断该文件是否存在来加载该文件
[root@home ~]# [ -f /etc/init.d/functions ] && . /etc/init.d/functions
[root@home ~]# [ -f /etc/init.d/functions ]
[root@home ~]# echo $?
0
数值比较
语法格式
[ 1 -eq 1 ]
如果使用
[[]]
,建议使用==
,<
,>
,<=
,>=
,!=
- -eq : 等于
- -ne : 不等于
- -gt : 大于
- -ge : 大于等于
- -lt : 小于
- -le : 小于等于
使用示范
[root@home ~]# [ 10 -eq 20 ] && echo $? || echo $?
1
[root@home ~]# [ 10 -lt 20 ] && echo $? || echo $?
0
[root@home ~]# [ 10 -le 10 ] && echo $? || echo $?
0
[root@home ~]# [ 10 -ne 10 ] && echo $? || echo $?
1
[root@home ~]# [ 10 -ge 10 ] && echo $? || echo $?
0
[root@home ~]# [ 10 -gt 10 ] && echo $? || echo $?
1
- 题:统计磁盘使用率如果磁盘大于5%则提示报警小于则提示ok
- 取出磁盘当前使用率
- 用数值表达式判断大小
- 给出提示
#!/bin/sh
#获得根目录的磁盘使用率
disk=`df -h|grep '/$'|awk '{print $(NF-1)}'`
#判断用数值表达式判断大小
[ ${disk%\%} -gt 1 ] && echo warning || echo ok
多整数比较
- -a : 与
- -o : 或
如果使用
[[]]
,则使用||
,&&
[root@home ~]# [ 10 -eq 10 -a 10 -gt 100 ]
[root@home ~]# echo $?
1
[root@home ~]# [ 10 -eq 10 -a 10 -lt 100 ]
[root@home ~]# echo $?
0
[root@home ~]# [ 10 -eq 10 -o 10 -lt 100 ]
[root@home ~]# echo $?
0
[root@home ~]# [ 10 -eq 10 -o 10 -lt 100 ]
[root@home ~]# echo $?
0
[root@home ~]# [[ 10 -eq 10 || 10 -lt 100 ]]
[root@home ~]# echo $?
0
[root@home ~]# [[ 10 -eq 10 && 10 -lt 100 ]]
[root@home ~]# echo $?
0
字符串比较
字符串需要加引号来进行比较
[root@home ~]# [ "$USER" = "root" ]
[root@home ~]# echo $?
0
[root@home ~]# [ $USER = "root" ]
[root@home ~]# echo $?
0
[root@home ~]# [ $USER = 'root' ]
[root@home ~]# echo $?
0
补充:如何查看变量
#查看当前系统变量
env
set
- -z : 字符串长度为0为真
- -n : 字符串长度不为0为真
使用示范,可以用该参数判断输入是否为空
[root@home ~]# AAA=""
[root@home ~]# echo $AAA
[root@home ~]# [ -z $AAA ]
[root@home ~]# echo $?
0
[root@home ~]# AAA="qqqq"
[root@home ~]# [ -z $AAA ]
[root@home ~]# echo $?
1
[root@home ~]# [ -n $AAA ]
[root@home ~]# echo $?
0
正则字符串比较和取反
与普通字符串比较的区别在于使用的符号为
=~
,对一个结果取反只需要在最左侧加上!
符号
[root@home ~]# echo $USER
root
[root@home ~]# [[ $USER =~ ^r ]]
[root@home ~]# echo $?
0
[root@home ~]# [[ $USER =~ ^1 ]]
[root@home ~]# echo $?
1
[root@home ~]# [[ ! $USER =~ ^1 ]]
[root@home ~]# echo $?
0
#也可以用来判断整数
[root@home ~]# [[ '123154' =~ ^[0-9]+$ ]]
[root@home ~]# echo $?
0
[root@home ~]# [[ 'a123154' =~ ^[0-9]+$ ]]
[root@home ~]# echo $?
1
补充部分
- 笔试题:Linux默认路由设置
route add default gw 10.0.0.254
route del default gw 10.0.0.254
ip route add 0/0 via 10.0.0.254
ip route del 0/0 via 10.0.0.254
- 网卡添加多个IP地址
#添加单个
ip addr add 10.0.0.100/24 dev eth0
#循环添加多个
for i in {10. .200};do ip addr add 10.0.0.$i/24 dev eth0;done
- 策略路由
#查看策略路由
ip ro list
#路由表
cat /etc/iproute2/rt_tables
最后一次更新于2020-02-07 12:50
0 条评论