shell

以上待补充
··变量测试
#判断 Name 变量是否定义
[ -v Name ]

实例:
[root@localhost ~]# class="no.13"
[root@localhost ~]# echo $class
no.13
[root@localhost ~]# [ -v class ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# unset class
[root@localhost ~]# [ -v class ]
[root@localhost ~]# echo $?
1


#判断 Name 变量是否定义并且是名称引用
[ -R Name ]

·数值测试
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-ge 是否大于等于
-lt 是否小于
-le 是否小于等于

实例:
[root@localhost ~]# i=1;j=2
[root@localhost ~]# i=1;j=2
[root@localhost ~]# [ $i -ne $j ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ $i -eq $j ]
[root@localhost ~]# echo $?
1

···字符串测试
-z String  字符串是否为空,没定义为空为真,不空为假
-n String  字符串是否不空,不空为真,空为假

[[]] 用法,建议,当使用正则表达式或通配符使用,一般情况使用 [ ]
== 左侧字符串是否和右侧的PATTERN相同
 注意:此表达式用于[[ ]]中,PATTERN为通配符
=~ 左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配
 注意: 此表达式用于[[ ]]中;扩展的正则表达式


实例1:
 

[root@localhost ~]# [ -z $a ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# a=13
[root@localhost ~]# [ -z $a ]
[root@localhost ~]# echo $?
1


[root@localhost ~]# 

实例2:字符串是否相同
 

[root@localhost ~]# str1=apple
[root@localhost ~]# str2=huawei
[root@localhost ~]# [ $str1 = $str2 ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# str1=huawei
[root@localhost ~]# [ $str1 = $str2 ]
[root@localhost ~]# echo $?
0

注意:在比较字符串时,建议变量放在“ ”中

双中括号用法:
实例1:
 

[root@localhost ~]# ip=10.2.1.1
[root@localhost ~]# [[ "$ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]
[root@localhost ~]# echo $?
0

实例2:
 

[root@centos8 ~]#[[ $IP =~ ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}
([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]]
[root@centos8 ~]#echo $?
1

··文件测试:
存在性测试
-e FILE: 文件存在性测试,存在为真,否则为假
-d FILE:是否存在且为目录文件
-f FILE:是否存在且为普通文件
-S FILE:是否存在且为套接字文件

实例:

[root@localhost ~]# [ -e a.txt ]
[root@localhost ~]# echo $?
0

文件权限测试:
-r FILE:是否存在且可读
-w FILE: 是否存在且可写
-x FILE: 是否存在且可执行

注意:最终结果由用户对文件的实际权限决定,而非文件属性决定

文件属性测试
-s FILE #是否存在且非空
-t fd #fd 文件描述符是否在某终端已经打开
-N FILE #文件自从上一次被读取之后是否被修改过
-O FILE #当前有效用户是否为文件属主
-G FILE #当前有效用户是否为文件属组

··()和{}
(CMD1;CMD2;...)和 { CMD1;CMD2;...; } 都可以将多个命令组合在一起,批量执行
()-开启子shell
{}-不开启子shell

实例:
 

[root@localhost ~]# a1=1;(echo $a1;a1=2;echo $a1);echo $a1
1
2
1


[root@localhost ~]# a1=1;{ echo $a1;a1=2;echo $a1; } ;echo $a1
1
2
2

注意:{} 里两边加空格,最后加分号

--组合测试条件
第一种[]
#两个条件均满足
[ EXPRESSION1 -a EXPRESSION2 ] 并且,EXPRESSION1和EXPRESSION2都是真,结果才为真
#只要一个满足即可
[ EXPRESSION1 -o EXPRESSION2 ] 或者,EXPRESSION1和EXPRESSION2只要有一个真,结果就为

#不满足条件
[ ! EXPRESSION ] 取反

第二种[[]]

COMMAND1 && COMMAND2 #并且,短路与,代表条件性的AND THEN
如果COMMAND1 成功,将执行COMMAND2,否则,将不执行COMMAND2

COMMAND1 || COMMAND2 #或者,短路或,代表条件性的OR ELSE
如果COMMAND1 成功,将不执行COMMAND2,否则,将执行COMMAND2

实例:
 

[root@localhost ~]# cat /etc/passwd|grep ^user
user01:x:1000:1000:user01:/home/user01:/bin/bash
[root@localhost ~]# id user01 &> /dev/null && echo "user is exist" ||echo "user is not exist"
user is exist
[root@localhost ~]# id user02 &> /dev/null && echo "user is exist" ||echo "user is not exist"
user is not exist

实例2:
 

ping -c1 -W1 $IP &> /dev/null && echo "$IP is up" || {  echo "$IP is
unreachable"; exit; }

取磁盘分区利用率最高
 

 df |grep '^/dev/sd' |grep -oE '[0-9]+%' |tr -d %|sort -nr|head -1
 
 df|grep '^/dev/sd'|tr -s ' ' %|cut -d% -f5|sort -nr|head -1


--使用read命令接收输入
-p   指定要显示的提示
-s   静默输入,一般用于密码
-n N 指定输入的字符长度N
-d '字符'   输入结束符
-t N TIMEOUT为N秒
read -p

实例:echo -en "\E[$[RANDOM%7+31];1m"
cat <<EOF
请选择:
1)备份数据库
2)清理日志
3)软件升级
4)软件回滚
5)删库跑路
EOF
echo -en '\E[0m'
read -p  "请输入上面数字1-5: " MENU
[ $MENU -eq 1 ] && ./backup.sh
[ $MENU -eq 2 ] && echo "清理日志"
[ $MENU -eq 3 ] && echo "软件升级"
[ $MENU -eq 4 ] && echo "软件回滚"
[ $MENU -eq 5 ] && echo "删库跑路"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值