shell脚本知识点4

Shell-day04

1. 昨日回顾


1. 批量重命名文件,打包压缩,还原名称。

	for
	
2. 判断字符串的长度,字符串的长度小于3的显示出来   

3. 变量的运算   加  减   乘   除   求余   求方    +  -   *   /   %    ^

4. 整数运算  expr  $(())  $[]   let  

5. 小数运算  bc  awk  Python 

6. 变量运算的案例  计算ps aux 中VSZ的和  RSS的和   实现一个简单计算器脚本

7. 变量的脚本案例  打印系统信息    变量替换的案例     菜单   

8. 流程控制语句介绍   

	单分支     双分支    多分支
	
	if  [  满足条件 ];then
		command
	fi
	
	if [ 满足条件 ];then
		command
	else
		command
	fi
	
	if [ 第一个条件 ];then
		command
	elif [ 第二个条件 ];then
		command
	else
		command
	fi
	
9. 流程控制语句之文件比较

	-e    #判断文件或者目录
	
	-f	  #判断文件
	
	-d	  #判断目录
	
	-s	  #判断文件是否为空
	
	-r	  #读权限
	
	-w	  #写权限
	
	-x	  #执行权限

10. 数据库备份场景 

[  ! -d  $Back_Dir ] && mkdir -p $Back_Dir

==

[  -d   $Back_Dir ] || mkdir -p $Back_Dir

== 

if [  -d   $Back_Dir ];then
	echo "目录存在"
else
	mkdir -p $Back_Dir
fi

==

if [ ! -d   $Back_Dir ];then
	mkdir -p $Back_Dir
fi

2. 流程控制语句之整数比较


-eq		#等于则条件为真		[  1 -eq 1 ]  成立   [ 1 -eq 2 ]  不成立

-ne		#不等于则条件为真      [ 1 -ne 2 ]  成立   [  1 -ne 1 ]  不成立

-gt		#大于则条件为真		[  2 -gt 1 ] 成立   [  1 -gt 2 ] 不成立

-lt		#小于则条件为真		[  1 -lt 2 ] 成立   [ 2 -lt 1 ]  不成立

-ge		#大于等于则条件为真    [  2 -ge 2  ]  成立   [  2 -ge 3 ] 不成立

-le		#小于等于则条件为真    [  2 -le 2  ]  成立   [ 2 -le 1 ]  不成立


[root@shell /service/scripts/day04]# [ 1 -eq 2 ] && echo "成立"  || echo "不成立"
不成立
[root@shell /service/scripts/day04]# [ 2 -eq 2 ] && echo "成立"  || echo "不成立"
成立
[root@shell /service/scripts/day04]# [ 2 -ne 2 ] && echo "成立"  || echo "不成立"
不成立
[root@shell /service/scripts/day04]# [ 3 -ne 2 ] && echo "成立"  || echo "不成立"
成立
[root@shell /service/scripts/day04]# [ 3 -gt 2 ] && echo "成立"  || echo "不成立"
成立
[root@shell /service/scripts/day04]# [ 1 -gt 2 ] && echo "成立"  || echo "不成立"
不成立
[root@shell /service/scripts/day04]# [ 1 -lt 2 ] && echo "成立"  || echo "不成立"
成立
[root@shell /service/scripts/day04]# [ 2 -lt 2 ] && echo "成立"  || echo "不成立"
不成立
[root@shell /service/scripts/day04]# [ 2 -ge 2 ] && echo "成立"  || echo "不成立"
成立
[root@shell /service/scripts/day04]# [ 1 -ge 2 ] && echo "成立"  || echo "不成立"
不成立
[root@shell /service/scripts/day04]# [ 1 -le 2 ] && echo "成立"  || echo "不成立"
成立
[root@shell /service/scripts/day04]# [ 3 -le 2 ] && echo "成立"  || echo "不成立"
不成立

#取反  !
[root@shell /service/scripts/day04]# [ ! 3 -le 2 ] && echo "成立"  || echo "不成立"
成立

#比较两个数字的大小

[root@shell /service/scripts/day04]# cat if-1.sh
#!/bin/bash
read -p "请输入第一个比较的数字:" Num1
read -p "请输入第二个比较的数字:" Num2
if [ $Num1 -gt $Num2  ];then
    echo "$Num1 > $Num2"
elif [ $Num1 -lt $Num2 ];then
    echo "$Num1 < $Num2"
else
    echo "$Num1 = $Num2"
fi
[root@shell /service/scripts/day04]# sh if-1.sh
请输入第一个比较的数字:1
请输入第二个比较的数字:2
1 < 2
[root@shell /service/scripts/day04]# sh if-1.sh
请输入第一个比较的数字:3
请输入第二个比较的数字:3
3 = 3
[root@shell /service/scripts/day04]# sh if-1.sh
请输入第一个比较的数字:4
请输入第二个比较的数字:3
4 > 3

3. 监测服务是否运行


1. 如何判断一个服务是否在运行状态   systemctl  status  server

2. 根据服务的状态命令的返回的状态码$?的值进行判断  0  服务正在运行  3  没有运行  4 没有这个服务   

3. 输入数字   #根据pid数字判断服务是否安装或者运行
 
4. 使用位置变量

[root@shell /service/scripts/day04]# cat if-2.sh
#!/bin/bash
#判断位置变量的个数
if [ $# -ne 1 ];then
    echo "Usage: $0 {sshd|nginx|php-fpm|rsyncd|mariadb|...}"
    exit
fi
#根据用户输入的位置变量进行检测服务是否在运行
systemctl status  "$1"  &>/dev/null
#根据返回值进行判断
State=$?
if [ $State -eq 0 ];then
    echo "$1 服务正在运行中..."
elif [ $State -eq 3 ];then
    echo "$1 服务没有在运行..."
elif [ $State -eq 4 ];then
    echo "请检查${1}服务是否安装!或者是否书写错误!系统中没有这个${1}服务!"
else
    echo "系统中没有正在运行你输入的PID号的服务..."
fi
[root@shell /service/scripts/day04]# sh if-2.sh
Usage: if-2.sh {sshd|nginx|php-fpm|rsyncd|mariadb|...}
[root@shell /service/scripts/day04]# sh if-2.sh sshd
sshd 服务正在运行中...
[root@shell /service/scripts/day04]# sh if-2.sh nginx
请检查nginx服务是否安装!或者是否书写错误!系统中没有这个nginx服务!
[root@shell /service/scripts/day04]# sh if-2.sh php-fpm
请检查php-fpm服务是否安装!或者是否书写错误!系统中没有这个php-fpm服务!
[root@shell /service/scripts/day04]# sh if-2.sh firewalld
firewalld 服务没有在运行...
[root@shell /service/scripts/day04]# sh if-2.sh mariadb
mariadb 服务正在运行中...
[root@shell /service/scripts/day04]# sh if-2.sh  4638
系统中没有正在运行你输入的PID号的服务...
[root@shell /service/scripts/day04]# sh if-2.sh  6957
6957 服务正在运行中...


4. 监控磁盘的使用率


1. 怎么查看磁盘根分区的使用率    df -h

2. 把根分区的使用率提取出来  进行判断

3. 给磁盘的使用率定义一个阈值  80    20   跟实际的值进行对比   整数  #要将百分数换成整数,采用变量替换方法

4. 使用率大于阈值,则进行报警发邮件 echo 

5. 正常则输出正常

[root@shell /service/scripts/day04]# cat if-3.sh
#!/bin/bash
#定义磁盘使用率的变量
Disk_Used=$(df -h | awk '/\/$/{print $(NF-1)}')
#根据变量的值进行跟定义的阈值进行比较
if [ ${Disk_Used/\%/} -gt 10 ];then
    echo -e "\033[41;37m当前根分区的使用率过高!当前根分区使用率为:$Disk_Used\033[0m"
    echo "磁盘根分区使用率过高!当前根分区使用率为:$Disk_Used" | mail -s "当前根分区的使用率过高!" 1176494252@qq.com &>/dev/null
    if [ $? -eq 0 ];then
        echo "邮件发送成功...."
    else
        echo "邮件发送失败...."
    fi
else
    echo -e "\033[42;37m当前根分区的使用率正常!当前根分区使用率为:$Disk_Used\033[0m"
fi
[root@shell /service/scripts/day04]# sh if-3.sh
当前根分区的使用率正常!当前根分区使用率为:5%
[root@shell /service/scripts/day04]# sh if-3.sh
当前根分区的使用率正常!当前根分区使用率为:7%
[root@shell /service/scripts/day04]# sh if-3.sh
当前根分区的使用率正常!当前根分区使用率为:7%
[root@shell /service/scripts/day04]# sh if-3.sh
当前根分区的使用率正常!当前根分区使用率为:7%
[root@shell /service/scripts/day04]# sh if-3.sh
当前根分区的使用率正常!当前根分区使用率为:9%
[root@shell /service/scripts/day04]# sh if-3.sh
当前根分区的使用率正常!当前根分区使用率为:9%
[root@shell /service/scripts/day04]# sh if-3.sh
当前根分区的使用率正常!当前根分区使用率为:9%
[root@shell /service/scripts/day04]# sh if-3.sh
当前根分区的使用率过高!当前根分区使用率为:13%
邮件发送成功....

5. 创建用户脚本


1. 提示用户输入要进行创建的用户

2. 判断该用户是否存在系统

3. 存在则提示存在不创建

4. 不存在则创建

5. 根据创建的结果进行输出

[root@shell /service/scripts/day04]# cat if-4.sh
#!/bin/bash
#提示用户输入要进行创建的用户
read -p "请输入你要创建的用户:" User
#判断用户输入创建的用户是否存在
id $User &>/dev/null
if [ $? -eq 0 ];then
    echo "${User}用户已经存在!无需再次创建!"
else
    useradd $User &>/dev/null
    if [ $? -eq 0 ];then
        echo "用户${User}创建成功...."
    else
        echo "用户${User}创建失败...."
    fi
fi
[root@shell /service/scripts/day04]# sh if-4.sh
请输入你要创建的用户:www
用户www创建成功....
[root@shell /service/scripts/day04]# sh if-4.sh
请输入你要创建的用户:www
www用户已经存在!无需再次创建!

6. 判断url地址是否能通


1. 调用函数库   

[root@shell /service/scripts/day04]# cat if-5.sh
#!/bin/bash
#引用函数库
[ -f /etc/init.d/functions ] && source /etc/init.d/functions    
#提示用户输入一个URL地址
read -p "请输入一个URL地址进行测试其是否可以访问:" Url
#根据用户输入的地址进行测试
ping -c1 -W1 $Url &>/dev/null  
#根据测试的结果进行输出信息
if [ $? -eq 0 ];then
    action "URL地址${Url}是可以访问的..."  /bin/true
else
    action "URL地址${Url}是不能访问的..." /bin/false
fi
[root@shell /service/scripts/day04]# sh if-5.sh
请输入一个URL地址进行测试其是否可以访问:www.baidu.com
URL地址www.baidu.com是可以访问的...                        [  OK  ]
[root@shell /service/scripts/day04]# sh if-5.sh
请输入一个URL地址进行测试其是否可以访问:www.baiduu.com
URL地址www.baiduu.com是不能访问的...                       [FAILED]


7. 流程控制语句之字符比较


==		#等于则条件为真     [  "$a"  ==  "$b"  ]

!=		#不等于则条件为真   [  "$a"  !=  "$b" ]

-z 		#字符串的长度为零则为真   [  -z  "$a" ]  

-n		#字符串的长度不为零则为真   [  -n  "$a"  ]


[root@shell /service/scripts/day04]# [ "$USER"  == "root"  ] && echo "OK"  || echo "ERROR"
OK
[root@shell /service/scripts/day04]# [ "$USER"  == "roo"  ] && echo "OK"  || echo "ERROR"
ERROR
[root@shell /service/scripts/day04]# [ "$USER"  != "roo"  ] && echo "OK"  || echo "ERROR"
OK
[root@shell /service/scripts/day04]# [ "$USER"  != "root"  ] && echo "OK"  || echo "ERROR"
ERROR
[root@shell /service/scripts/day04]# [  -z  "$USER"  ] && echo "OK"  || echo "ERROR"
[root@shell /service/scripts/day04]# a=123
[root@shell /service/scripts/day04]# [  -z  "$a"  ] && echo "OK"  || echo "ERROR"
ERROR
[root@shell /service/scripts/day04]# a=""
[root@shell /service/scripts/day04]# [  -z  "$a"  ] && echo "OK"  || echo "ERROR"
OK

[root@shell /service/scripts/day04]# [  -n  "$USER"  ] && echo "OK"  || echo "ERROR"
OK
[root@shell /service/scripts/day04]# [  -n  "$a"  ] && echo "OK"  || echo "ERROR"
ERROR

[root@shell /service/scripts/day04]# cat if-6.sh
#!/bin/bash
read -p "请输入一个yes:" Yes
if [ "$Yes" == "yes"  ];then
    echo "你输入的是一个:yes"
else
    echo "你输入的不是一个:yes"
fi
[root@shell /service/scripts/day04]# sh if-6.sh
请输入一个yesyes
你输入的是一个:yes
[root@shell /service/scripts/day04]# sh if-6.sh
请输入一个yes:no
你输入的不是一个:yes


[root@shell /service/scripts/day04]# cat if-6.sh
#!/bin/bash
read -p "请输入一个yes:" Yes
#判断用户输入的是否为空值,回车键
if [ -z "$Yes" ];then
    echo "此脚本不支持直接回车!请输入一个值!"
    exit
fi
if [ "$Yes" == "yes"  ];then
    echo "你输入的是一个:yes"
else
    echo "你输入的不是一个:yes"
fi
[root@shell /service/scripts/day04]# sh if-6.sh
请输入一个yes:
此脚本不支持直接回车!请输入一个值!
[root@shell /service/scripts/day04]# sh if-6.sh
请输入一个yesyes
你输入的是一个:yes


8. 多条件比对



-a   	#并且    多条件同时满足  则条件成立 

-o		#或者	   多条件只要有一个成立,则条件成立

[root@shell /service/scripts/day04]# [ 1 -lt 2 -a 2 -lt 3 ] && echo "成立" || echo "不成立"
成立
[root@shell /service/scripts/day04]# [ 2 -lt 2 -a 2 -lt 3 ] && echo "成立" || echo "不成立"
不成立
[root@shell /service/scripts/day04]# [ 2 -lt 2 -a 3 -lt 3 ] && echo "成立" || echo "不成立"
不成立
[root@shell /service/scripts/day04]# [ 2 -lt 2 -o 3 -lt 3 ] && echo "成立" || echo "不成立"
不成立
[root@shell /service/scripts/day04]# [ 1 -lt 2 -o 3 -lt 3 ] && echo "成立" || echo "不成立"
成立
[root@shell /service/scripts/day04]# [ 1 -lt 2 -o 1 -lt 3 ] && echo "成立" || echo "不成立"
成立
[root@shell /service/scripts/day04]# [ "$USER" == "root" -a "$UID" -eq  0  ] && echo "成立" || echo "不成立"
成立
[root@shell /service/scripts/day04]# [ "$USER" == "root" -a "$UID" -eq  1  ] && echo "成立" || echo "不成立"
不成立


&&      #并且    多条件同时满足  则条件成立

|| 		#或者	   多条件只要有一个成立,则条件成立

#使用&& || 进行条件判断时必须使用双中括号[[]]  (&& || 在括号中使用时) 

[root@shell /service/scripts/day04]# [[ "$USER" == "root" && "$UID" -eq  1  ]] && echo "成立" || echo "不成立"
不成立
[root@shell /service/scripts/day04]# [[ "$USER" == "root" && "$UID" -eq  0  ]] && echo "成立" || echo "不成立"
成立
[root@shell /service/scripts/day04]# [[ "$USER" == "root" || "$UID" -eq  0  ]] && echo "成立" || echo "不成立"
成立
[root@shell /service/scripts/day04]# [[ "$USER" == "roo" || "$UID" -eq  0  ]] && echo "成立" || echo "不成立"
成立
[root@shell /service/scripts/day04]# [[ "$USER" == "roo" || "$UID" -eq  1  ]] && echo "成立" || echo "不成立"
不成立


[root@shell /service/scripts/day04]# [ "$USER" == "root" -a "$UID" -eq 0 ] &&echo "该用户是超级管理员" || echo "该用户不是超级管理员"
该用户是超级管理员

[root@shell /service/scripts/day04]# [[ "$USER" == "root" && "$UID" -eq 0 ]] &&echo "该用户是超级管理员" || echo "该用户不是超级管理员"
该用户是超级管理员

[root@shell /service/scripts/day04]# [[ ! "$USER" != "root" && ! "$UID" -ne 0 ]] &&echo "该用户是超级管理员" || echo "该用户不是超级.理员"
该用户是超级管理员

[root@shell /service/scripts/day04]# [[ "$USER" != "root" || "$UID" -ne 0 ]] &&echo "该用户是超级管理员" || echo "该用户不是超级管理."
该用户不是超级管理员


9. 判断学生的成绩优劣


0-100  分数

0    	地秀

1-59   不及格  需要补考

60-79   及格 

80-99  优秀

100    天秀

>100  要有提示

判断用户输入的是否为数字并且判断用户不能输入空值

单条件  




多条件


10.流程控制语句之正则比较

^  $   *  +  
#^ 表示以什么开头  $ 表示以什么结尾 * 表示出现0次或者0次以上  + 表示出现一次或一次以上
#[]匹配里面的任意一个  {数字} 里面出现的次数
模糊匹配:  =~

精确匹配:  ==  

正则需要使用双中括号

[root@shell /service/scripts/day04]# [[ "$USER"  =~ ^r ]] && echo "OK"  || echo "ERROR"
OK
[root@shell /service/scripts/day04]# [[ "$USER"  =~ ^roo ]] && echo "OK"  || echo "ERROR"
OK
[root@shell /service/scripts/day04]# [[ rtt  =~ ^r ]] && echo "OK"  || echo "ERROR"
OK
[root@shell /service/scripts/day04]# [[ rtt  =~ t$ ]] && echo "OK"  || echo "ERROR"
OK


[root@shell /service/scripts/day04]# Num=123
[root@shell /service/scripts/day04]# [[ $Num =~ ^[0-9]*$  ]] && echo "OK" || echo "ERROR"
OK
[root@shell /service/scripts/day04]# Num=123a
[root@shell /service/scripts/day04]# [[ $Num =~ ^[0-9]*$  ]] && echo "OK" || echo "ERROR"
ERROR
[root@shell /service/scripts/day04]# Num=""
[root@shell /service/scripts/day04]# [[ $Num =~ ^[0-9]*$  ]] && echo "OK" || echo "ERROR"
OK
[root@shell /service/scripts/day04]# # * 表示前面的字符出现0次或者0次以上
[root@shell /service/scripts/day04]# [[ $Num =~ ^[0-9]+$  ]] && echo "OK" || echo "ERROR"
ERROR
[root@shell /service/scripts/day04]# # + 表示前面的字符出现1次或者1次以上

[root@shell /service/scripts/day04]# Num=12
[root@shell /service/scripts/day04]# [[ $Num =~ ^[0-9]{2}$  ]] && echo "OK" || echo "ERROR"
OK
[root@shell /service/scripts/day04]# Num=123
[root@shell /service/scripts/day04]# [[ $Num =~ ^[0-9]{2}$  ]] && echo "OK" || echo "ERROR"  #前面的字符只出现了2次 
ERROR
[root@shell /service/scripts/day04]# # {2} 表示前面的字符出现2次

[root@shell /service/scripts/day04]# abc=abcd
[root@shell /service/scripts/day04]# [[ $abc =~ ^[a-Z]+$  ]] && echo "OK" || echo "ERROR"
OK   #表示前面的字符出现了一次或者一次以上 
[root@shell /service/scripts/day04]# abc=abcd1
[root@shell /service/scripts/day04]# [[ $abc =~ ^[a-Z]+$  ]] && echo "OK" || echo "ERROR"
ERROR


[root@shell /service/scripts/day04]# cat if-9.sh
#!/bin/bash
#提示用户输入一组字符串,必须是字母
read -p "请输入一组字符串,必须是字母组成的:" Zm
#判断用户输入的是否是字母
if [[ $Zm =~ ^[a-Z]+$ ]];then
    echo "你输入的是一个字母!"
else
    echo "你输入的不符合条件!"
fi
[root@shell /service/scripts/day04]# sh if-9.sh
请输入一组字符串,必须是字母组成的:12
你输入的不符合条件!
[root@shell /service/scripts/day04]# sh if-9.sh
请输入一组字符串,必须是字母组成的:abc
你输入的是一个字母!
[root@shell /service/scripts/day04]# sh if-9.sh
请输入一组字符串,必须是字母组成的:avbgvrtg
你输入的是一个字母!
[root@shell /service/scripts/day04]# sh if-9.sh
请输入一组字符串,必须是字母组成的:fgergf4gtrg
你输入的不符合条件!

11.创建用户,输入前缀和后缀

1. 执行脚本时,提示用户输入前缀,前缀必须是有字母组成的 例如:qls

2. 提示用户输入后缀,后缀必须是数字,例如:123

3. 根据用户的前缀和后缀进行创建用户

做题思路:

1. 提示用户输入前缀  read -p  

2. 判断用户输入的前缀是否为字母或者为空值。

3. 提示用户输入后缀  read -p

4. 判断用户输入的后缀是否为数字 

5. 将用户的前缀和后缀组合成一个用户

6. 判断该用户是否存在该系统 

7. 存在则不进行创建,不存在则进行创建

8. 根据创建的结果进行返回信息


[root@shell /service/scripts/day04]# cat if-10.sh
#!/bin/bash
#提示用户输入前缀
read -p "请输入你要创建用户的前缀,前缀必须是字母组成的:" Qz
#判断用户输入的前缀是否为字母
if [[ ! $Qz =~ ^[a-Z]+$ ]];then
    echo "你输入的前缀不符合要求!必须是字母组成的!"
    exit
fi
#提示用户输入后缀
read -p "请输入你要创建用户的后缀,后缀必须是数字组成的:" Hz
#判断用户输入的后缀是否为数字
if [[ ! $Hz =~ ^[0-9]+$ ]];then
    echo "你输入的后缀不符合条件!必须是数字组成的!"
    exit
fi
#将前缀和后缀组合成一个变量
User=${Qz}${Hz}
#判断该用户是否存在该系统
id  $User &> /dev/null
if [ $? -eq 0 ];then
    echo "用户${User}已经存在该系统!无需再次进行创建!"
else
    useradd  $User &>/dev/null
    if [ $? -eq 0 ];then
        echo "用户${User}创建成功..."
    else
        echo "用户${User}创建失败..."
    fi
fi
[root@shell /service/scripts/day04]# sh if-10.sh
请输入你要创建用户的前缀,前缀必须是字母组成的:34f
你输入的前缀不符合要求!必须是字母组成的!
[root@shell /service/scripts/day04]# sh if-10.sh
请输入你要创建用户的前缀,前缀必须是字母组成的:abc
请输入你要创建用户的后缀,后缀必须是数字组成的:r43
你输入的后缀不符合条件!必须是数字组成的!
[root@shell /service/scripts/day04]# sh if-10.sh
请输入你要创建用户的前缀,前缀必须是字母组成的:
你输入的前缀不符合要求!必须是字母组成的!
[root@shell /service/scripts/day04]# sh if-10.sh
请输入你要创建用户的前缀,前缀必须是字母组成的:qls
请输入你要创建用户的后缀,后缀必须是数字组成的:123
用户qls123创建成功...
[root@shell /service/scripts/day04]# sh if-10.sh
请输入你要创建用户的前缀,前缀必须是字母组成的:qls
请输入你要创建用户的后缀,后缀必须是数字组成的:123
用户qls123已经存在该系统!无需再次进行创建!

	
posted @   zbzSH  阅读(86)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示