版权声明:©来自CSDN博客作者"李在奋斗"的原创作品,如需转载,请注明出处 https://blog.csdn.net/qq_31725371/article/details/83549460
文章目录
条件表达式及逻辑表达式
//条件测试
1. 格式一:test 条件表达式
[root@mysql-master ~]# test -d /www ; echo $?
2. 格式二:[ 条件表达式 ]
[root@mysql-master ~]# [ -d /www ];echo $?
3. 格式三:[[ 条件表达式 ]]
[root@mysql-master ~]# [[ -d /www ]];echo $?
文件及目录判断
// 常用选项
[ File1 –ef File2 ] #两个文件是否为同一个文件,可用于硬连接。主要判断两个文件是否指向同一个inode。
[ File1 –nt File2 ] #判断文件1是否比文件2新
[ File1 –ot File2 ] #判断文件1比是否文件2旧
[ –d File ] #是否是目录
[ –r File ] #文件属否存在并可读
[ –w File ] #文件是否存在并可写
[ –x File ] #文件属否存在并可执行
[ –s File ] #文件是否是非空白文件
[ –e File ] #文件或目录是否存在 (常用)
[ –f File ] #File是否为正规文件 (常用)
[ –g File ] #文件是否是设置了组id
[ –G File ] #文件属于的有效组ID
[ –h File ] #文件是否是一个符号链接(同-L)
[ –L File ] #文件是否是一个符号链接(同-h)
[ –k File ] #文件是否设置了Sticky bit位
[ –b File ] #文件存在并且是块设备文件
[ –o File ] #文件的属于有效用户ID
[ –b file ] #文件是否块设备文件
[ –c File ] #文件并且是字符设备文件
案例:备份数据库中wordpress库,每日凌晨开始,备份成功则邮件通知
// mysql_backup.sh
#!/bin/bash
#Input needs to backup the name of the database
read -p "Input mysqldump database name: " Data
/usr/bin/mysqldump -uroot -p123456 -B $Data > /backup/$(date +%F)_db.mysql
// 优化下
#!/bin/bash
User=root
Pass=123456
Database=wordpress
Backup_Dir=/backup
Date=$(date +%F)
Backup_Path=$Backup_Dir/$Date
Filename="$Database"_"$Date"_db.sql
Result_Log=$Backup_Path/backup_"$Database".log
test -d $Backup_Path || mkdir -p $Backup_Path
if [ $? -eq 0 ];then
echo "$Backup_Path create successed !" > $Result_Log
/usr/bin/mysqldump -uroot -p123456 -B $Database > $Backup_Path/$Filename
if [ $? -eq 0 ];then
echo "$Database Backup successed!" >> $Backup_Path/backup_"$Database".log
mail -s "$Database Backup Result" [email protected] < $Result_Log
fi
fi
数值比较
[ 1 -gt 10 ] 大于
[ 1 -lt 1o ] 小于
[ 1 -eq 10 ] 等于
[ 1 -ne 10 ] 不等于
[ 1 -ge 10 ] 大于等于
[ 1 -le 10 ] 小于等于
// C语言风格(())
[root@mysql-master ~]# ((10>2));echo $?
0
[root@mysql-master ~]# ((10<2));echo $?
1
[root@mysql-master ~]# ((10!=2));echo $?
0
[root@mysql-master ~]#
案例:r磁盘根/
使用率,超过80%发告警
// disk_space.sh
#!/bin/bash
Disk_Free=$(df -h | grep "/$" |awk '{print $5}'|awk -F '%' '{print $1}')
if [ $Disk_Free -ge 80 ];then
echo "Disk space is use: $Disk_Free%"
fi
字符串比较->批量创建用户
字符串比较要习惯给变量加""
[ –n 字符串 ] #字符串的长度非零
[ –z 字符串 ] #字符串的长度是否为零
[ 字符串1=字符串2 ] #字符串是否相等,若相等返回true
[ 字符串1!=字符串2 ] #字符串是否不等,若不等反悔false
//若字符串变量不存在时容易引起语法错误,一般的用""引起来
[root@mysql-master ~]# [ "$USER" == "root" ];echo $?
0
[root@mysql-master ~]# [ "$USER" = "root" ];echo $?
0
[root@mysql-master ~]# [ "$USER" != "root" ];echo $?
1
[root@mysql-master ~]# echo ${#USER} #查看字符串长度
4
[root@mysql-master ~]#
//字符串条件比较用[[]]才可以支持正则
//判断字符串是否是纯数字
#!/usr/bn/bash
num1=111
num2=222t
num3=12yy6
num4='^[0-9]+$'
[[ "$num1" =~ ^[0-9]+$ ]];echo "num1=$num1: $?"
[[ "$num2" =~ ^[0-9]+$ ]];echo "num2=$num2: $?"
[[ "$num3" =~ ^[0-9]+$ ]];echo "num3=$num3: $?"
[ "$num4" == ^[0-9]+$ ];echo "num4=$num4: $?" #这里单[]无法使用正则
[root@mysql-master scripts]# sh zhengze.sh
num1=111: 0
num2=222t: 1
num3=12yy6: 1
num4=^[0-9]+$: 0
[root@mysql-master scripts]#
案例:批量创建用户batch_useradd.sh
#!/bin/bash
. /etc/init.d/functions
Path=/tmp/
UserDb=$Path/user.db
[ -d "$Path" ] || mkdir $Path
[ -f "$UserDb" ] || touch $UserDb
read -p "Number of input creation: " Num
if [[ ! "$Num" =~ ^[0-9]+$ ]];then
echo "Error Number"
exit
fi
read -p "Username prefix: " Prefix
if [ -z "$Prefix" ];then
echo "Error prefix"
exit
fi
i=1
while [ $i -le $Num ]
do
Passwd=`echo $RANDOM|md5sum|cut -c 2-9`
useradd $Prefix$i &>/dev/null && User_status=$?
if [ "$User_status" == "0" ];then #这里如果用户已存在,则User_status就不会被定义,用-eq判断会出现报错,或者直接用$?,不给他声明变量
echo "$Passwd"|passwd --stdin $Prefix$i &> /dev/null
if [ $? -eq 0 ];then
action "adduser $Prefix$i" /bin/true
echo -e "Successed user:\t$Prefix$i pass:$Passwd" >>$UserDb
else
action "Error: Modify passwd $Prefix$i" /bin/false
echo -e "Modify passwd Filed user:\t$Prefix$i pass:$Passwd" >>$UserDb
fi
else
action "adduser $Prefix$i" /bin/false
fi
let i++
done