Shell的常用判断,表达式
1 文件测试
[ -e file|dir ] 存在即为真[ -f file ] 文件存在即为真[ -d dir ] 目录存在即为真[ -r file ] 是否有读的权限[ -w file ] 是否有写入权限[ -x file ] 是否有执行权限
[root@shell ~]# test -f /etc/hosts && echo "文件存在" 文件存在[root@shell ~]# test -f /etc/hostss && echo "文件存在" || echo "文件不存在" 文件不存在[root@shell ~]# test -d /etc && echo "文件存在" || echo "文件不存在" 文件存在 [root@shell ~]# ll 1.sh-rw-r--r-- 1 root root 10 Feb 28 19:29 1.sh [root@shell ~]# [ -x 1.sh ] && echo "文件存在" || echo "文件不存在" 文件不存在 [root@shell ~]# chmod +x 1.sh [root@shell ~]# ll 1.sh -rwxr-xr-x 1 root root 10 Feb 28 19:29 1.sh [root@shell ~]# [ -x 1.sh ] && echo "文件存在" || echo "文件不存在" 文件存在 [root@shell ~]# [ -r 1.sh ] && echo "文件存在" || echo "文件不存在" 文件存在 [root@shell ~]# [ -w 1.sh ] && echo "文件存在" || echo "文件不存在" 文件存在 [root@shell ~]# [ -L 1.sh ] && echo "文件存在" || echo "文件不存在" 文件不存在 [root@shell ~]# [ -L /etc/rc.local ] && echo "文件存在" || echo "文件不存在" 取反 [root@shell ~]# [ ! -f /etc/hosts ] && echo ok || echo error error # Shell的函数库:加载functions [ -f /etc/init.d/functions ] && . /etc/init.d/functions
2 整数数值比较
[ 整数1 比较符 整数2 ][ 10 -eq 10 ] 等于[ 10 -gt 5 ] 大于[ 10 -ge 10 ] 大于或等于[ 10 -lt 20 ] 小于[ 10 -le 10 ] 小于或等于[ 10 -ne 20 ] 不等于
注意: 如果是在[[]]或(())中的比较符,使用= != > >= < <=
[root@shell ~]# [ 10 -eq 10 ] && action /bin/true || action /bin/false /bin/true [ OK ][root@shell ~]# [ 10 -ne 10 ] && action /bin/true || action /bin/false /bin/false [ OK ][root@shell ~]# [ 10 -gt 10 ] && action /bin/true || action /bin/false /bin/false [ OK ][root@shell ~]# [ 10 -lt 10 ] && action /bin/true || action /bin/false /bin/false [ OK ]
使用脚本取出当前系统的 主机名称 系统版本 内核版本 虚拟平台 eth0网卡IP地址 外网网卡IP地址(curl cip.cc) 当前内存使用率 磁盘使用率 负载使用情况 [root@shell ~]# cat os.sh #!/bin/sh HostName=$(hostnamectl |awk 'NR==1{print $3}') System=$(hostnamectl |grep Operating|awk '{print $3"_"$4"_"$5}') Kernel=$(hostnamectl |grep Kernel|awk '{print $3}') VT=$(hostnamectl |grep Virtualization|awk '{print $2}') Eth0=$(ifconfig eth0|awk 'NR==2{print $2}') Network_IP=$(curl -s cip.cc|awk 'NR==1{print $3}') Mem_Use=$(free|awk 'NR==2{print $3/$2*100}')% Disk_Use=$(df -h|grep '/$'|awk '{print $(NF-1)}') Load_Use=$(uptime|awk '{print $(NF-2)}') echo -e "\t\t当前主机名称是: " $HostName echo -e "\t\t当前的系统版本是: " $System echo -e "\t\t当前的内核版本是: " $Kernel echo -e "\t\t当前使用的虚拟平台是: " $VT echo -e "\t\t当前的eth0网卡IP是: " $Eth0 echo -e "\t\t当前的外网IP是: " $Network_IP echo -e "\t\t当前的内存使用率是: " $Mem_Use echo -e "\t\t当前的磁盘使用率是: " $Disk_Use echo -e "\t\t当前的负载使用率是: " $Load_Use
3 多整数比较
-a and 两端都要成立则为真 -o or 一端成立则为真[ 整数1 比较符 整数2 -a 整数3 比较符 整数4 ]
[root@shell ~]# [ 10 -eq 10 -a 20 -gt 10 ] && action /bin/true || action /bin/false /bin/true [ OK ][root@shell ~]# [ 10 -ne 10 -a 20 -gt 10 ] && action /bin/true || action /bin/false /bin/false [ OK ][root@shell ~]# [ 10 -ne 10 -o 20 -gt 10 ] && action /bin/true || action /bin/false /bin/true [ OK ]
注意:[[]]中的和与或使用&& ||
[root@shell ~]# [[ 10 -ne 10 || 20 -gt 10 ]] && action /bin/true || action /bin/false /bin/true [ OK ] [root@shell ~]# [[ 10 -ne 10 && 20 -gt 10 ]] && action /bin/true || action /bin/false /bin/false [ OK ]
4 字符串比对
# 字符串两端加双引号[ "字符串1" = "字符串2" ] 等于[ "字符串1" != "字符串2" ] 不等于 -z 字符串长度为0 则为真 -n 字符串长度不为0 则为真
[root@shell ~]# [ "oldboy" = "oldboy" ] && echo 成立 || echo 不成立 成立[root@shell ~]# [ "oldboy" != "root" ] && echo 成立 || echo 不成立 成立 [root@shell ~]# [ "$USER" = "root" ] && echo 成立 || echo 不成立 成立[root@shell ~]# [ "$USER" = "oldboy" ] && echo 成立 || echo 不成立 不成立[root@shell ~]# [ "$USER" != "oldboy" ] && echo 成立 || echo 不成立 成立
[root@shell ~]# oldboy="test"[root@shell ~]# echo $oldboytest[root@shell ~]# [ -z "$oldboy" ] && echo ok || echo error error[root@shell ~]# [ -n "$oldboy" ] && echo ok || echo error ok
5 正则比对
语法格式:[[ "字符串" 正则匹配 "字符串" ]]
[root@shell ~]# [[ "root" =~ ^r ]] && echo 成立|| echo 不成立 成立[root@shell ~]# [root@shell ~]# [[ "root" =~ ^o ]] && echo 成立|| echo 不成立 不成立[root@shell ~]# [[ "root" =~ t$ ]] && echo 成立|| echo 不成立 成立
使用正则对传参的数字进行判断
[root@shell ~]# cat expr.sh #!/bin/sh[ $# -ne 2 ] && echo "请输入两个整数" && exit[[ "$1" =~ ^[0-9]+$ && "$2" =~ ^[0-9]+$ ]] || exit #[[ ! "$2" =~ ^[0-9]+$ ]] && echo "请输入整数" && exit[ $1 -gt $2 ] && echo "$1 > $2"[ $1 -lt $2 ] && echo "$1 < $2"[ $1 -eq $2 ] && echo "$1 = $2" [root@shell ~]# cat expr.sh #!/bin/sh[ $# -ne 2 ] && echo "请输入两个整数" && exit[[ ! "$1" =~ ^[0-9]+$ ]] && echo "请输入整数" && exit[[ ! "$2" =~ ^[0-9]+$ ]] && echo "请输入整数" && exit[ $1 -gt $2 ] && echo "$1 > $2"[ $1 -lt $2 ] && echo "$1 < $2"[ $1 -eq $2 ] && echo "$1 = $2" [root@shell /server/scripts]# cat check_inter.sh #!/bin/bash read -p "请输入第一个整数:" NUM1 read -p "请输入第二个整数:" NUM2 expr $NUM1 + $NUM2 &>/dev/null[ $? -ne 0 ] && echo "请输入整数!" && exit[ $NUM1 -eq $NUM2 ] && echo "数值比较结果:$NUM1 = $NUM2"[ $NUM1 -gt $NUM2 ] && echo "数值比较结果:$NUM1 > $NUM2"[ $NUM1 -lt $NUM2 ] && echo "数值比较结果:$NUM1 < $NUM2"
精彩评论