Shell之条件测试及shell批量创建用户脚本

版权声明:©来自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

猜你喜欢

转载自blog.csdn.net/qq_31725371/article/details/83549460