
Shell条件测试
Shell条件测试
- 格式1: test 条件表达式
- 格式2: [ 条件表达式 ]
- 格式3: [[ 条件表达式 ]]
1.文件测试
[ -e dir|file ] 存在则为真 [ -d dir ] 目录是否存在 [ -f file ] 文件是否存在 [ -r file ] 文件是否有读权限 [ -x file ] 文件是否有执行权限 [ -w file ] 文件是否有写权限1.常见使用方式
[ ! -d /bbb ] && mkdir /test [ -d /bbb ] || mkdir /test2.备份mysql,手动输入你需要备份的库名称
read -p "请输入需要备份的库名称: " dumpdb mysqldump -uroot -pBgx123.com -B $dumpdb > /backup/$(date +%F)_db.sql3.备份mysql,无需手动输入需要备份的库名
#!/usr/bin/bash User=root Pass=Bgx123.com Data=bgxdb Back_dir=/backup Date=$(date +%F) Backup_Path=$Back_dir/$Date test -d $Backup_Path || mkdir -p $Backup_Path if [ $? -eq 0 ];then echo "=======备份开始=======" mysqldump -u$User -p$Pass -B$Data >$Backup_Path/mysql_db.sql if [ $? -eq 0];then echo "=======备份结束=======" fi fi
2.数值比较
数值比较 [ 整数 1 操作符 整数 2 ]
[ 1 -gt 10 ] 大于 [ 1 -lt 10 ] 小于 [ 1 -eq 10 ] 等于 [ 1 -ne 10 ] 不等于 [ 1 -ge 10 ] 大于等于 [ 1 -le 10 ] 小于等于1.查看磁盘/当前使用状态,如果使用率超过80%则报警发邮件
//怎么看磁盘使用率,怎么获取对应的值 df -h|grep "/$"|awk '{print $5}'|awk -F '%' '{print $1}' //怎么进行数值比对 if [ $Disk_Free -ge 30 ];then echo "Disk Is Use:${Disk_Free}%" > /tmp/disk_use.txt fi //脚本 [root@bgx]# cat disk_free.sh #!/usr/bin/bash Disk_Free=$(df -h|grep "/$"|awk '{print $5}'|awk -F '%' '{print $1}') if [ $Disk_Free -ge 30 ];then echo "Disk Is Use:${Disk_Free}%" > /tmp/disk_use.txt fi2.查看内存/当前使用状态,如果使用率超过80%则报警发邮件
[root@bgx]# cat mem.sh Mem_Total=$(free -m|grep "^M"|awk '{print $2}') Mem_Use=$(free -m|grep "^M"|awk '{print $3}') Mem_B=$((($Mem_Use*100)/$Mem_Total)) if [ $Mem_B -ge 30 ];then echo -e "Memory Is Err ${Mem_B}% " else echo Memory Is OK ${Mem_B}%" fi3.打印当前系统版本,内核,虚拟平台,主机名,内网Ip,外网Ip
3.字符串比较
1.字符串比对
[root@bgx]# [ "$USER " = "root" ];echo $? 0 [root@bgx]# BBB="" [root@bgx]# echo ${#BBB} 0 #字符长度为 0 [root@bgx]# [ -z "$BBB" ] [root@bgx]# echo $? 0 #字符长度不为 0 [root@bgx]# [ -n "$BBB" ] [root@bgx]# echo $? 1 #小结:变量为空 或未定义: 长度都为02.字符串比对,必须使用双引号
[root@bgx]# [ "$USER" = "root" ];echo $? 0 [root@bgx]# [ "$USER" = "bgx" ];echo $? 1 [root@bgx]# [ "$USER" != "alice" ];echo $? 0
3.多整数比对条件
[root@bgx]# [ 1 -lt 2 -a 5 -gt 10 ];echo $? 1 [root@bgx]# [ 1 -lt 2 -o 5 -gt 10 ];echo $? 0 #正则比对会使用到[[]] [root@bgx]# [[ 1 -lt 2 && 5 -gt 10 ]];echo $? 1 [root@bgx]# [[ 1 -lt 2 || 5 -gt 10 ]];echo $? 0
4.正则比对
# 单括号无法使用正则语法 [root@bgx]# [ "$USER" =~ ^r ];echo $? bash: [: =~: binary operator expected 2 # 双[]才可以使用正则匹配 [root@bgx]# [[ "$USER" =~ ^r ]];echo $? 0 # 判断变量是不是数字 [root@bgx]# num=123 [root@bgx]# [[ "$num" =~ ^[0-9]+$ ]];echo $? 0 [root@bgx]# num=123a [root@bgx]# [[ "$num" =~ ^[0-9]+$ ]];echo $? 1
5.判断用户输入的是否是数字
[root@bgx]# cat test02.sh #!/bin/bash read -p "请输入一个数值: " num if [[ ! "$num" =~ ^[0-9]+$ ]];then echo " 你输入的不是数字,程序退出!!!" exit fi echo "Number Is $num"
6.批量创建用户脚本
#!/usr/bin/bash read -p "Please input number: " num read -p "Please input prefix: " prefix for i in `seq $num`;do user=$prefix$i useradd $user echo "123" |passwd --stdin $user &>/dev/null if [ $? -eq 0 ];then echo "$user is created." fi done
7.批量创建用户脚本, 改进版
#!/usr/bin/bash read -p "Please input number: " num if [[ ! "$num" =~ ^[0-9]+$ ]];then echo "error number!" && exit 1 fi read -p "Please input prefix: " prefix if [ -z "$prefix" ];then echo "error prefix" exit fi for i in `seq $num` do user=$prefix$i useradd $user echo "123" |passwd --stdin $user &>/dev/null if [ $? -eq 0 ];then echo "$user is created." fi done