if是模仿人类的判断来进行的,只有true和false两种结果
比较字符 | 含义 | 示例 |
---|---|---|
-eq | 等于则条件为真 | [ 1 -eq 10 ] |
-lt | 小于则条件为真 | [ 1 -lt 10 ] |
-le | 小于等于则条件为真 | [ 1 -le 10 ] |
-ne | 不等于则条件为真 | [ 1 -ne 10 ] |
-gt | 大于则条件为真 | [ 1 -gt 10 ] |
-ge | 大于等于则条件为真 | [ 1 -ge 10 ] |
比较字符 | 含义 | 比较字符 | 含义 |
---|---|---|---|
== | 相等 | != | 不等 |
-n | 检查字符串长度是否大于0 | -z | 检查字符串长度是否为0 |
文件比较运算符 | 含义 | 示例 |
---|---|---|
-e | 如果文件或目录存在,则为真 | [ -e /var/log/syslog ] |
-d | 如果文件存在且为目录,则为真 | [ -d /tmp/mydir ] |
-f | 如果文件存在且为文件,则为真 | [ -f /usr/bin/grep ] |
-L | 如果文件存在文件为符号链接,则为真 | [ -L /usr/bin/grep ] |
-r | 如果文件存在文件且可读,则为真 | [ -r /var/log/syslog ] |
-w | 如果文件存在文件且可写,则为真 | [ -w /var/mytmp.txt ] |
-x | 如果文件存在且为可执行文件,则为真 | [ -x /usr/bin/grep.sh ] |
-nt | 如果文件1比 文件2 新,则为真 | [ /tmp/install/etc/services -nt /etc/services ] |
-ot | 如果文件1 比文件2 旧,则为真 | [ /boot/bzImage -ot arch/i386/boot/bzImage ] |
1.单分支结构
#单分支语法 单分支代码示例
if [ 如果你有房 ];then if [ $1 -eq $2 ];then
我们就结婚 echo "ok"
fi fi
2.双分支结构
#双分支结构 双分支代码示例
if [ 如果你有房 ];then if [ $1 -eq $2 ];then
我就嫁给你 echo "ok!"
else else
拜拜! echo "err!"
fi fi
3.多分支结构
#多分支结构
if [ 如果你有房 ];then
我就嫁给你
elif [ 如果你有车 ];then
我就嫁给你
elif [ 如果你有钱 ];then
我就嫁给你
else
拜拜!
fi
#需求1:输入成绩,显示及格优秀
[root@manage if]# cat var02.sh
#!/bin/bash
read -p "成绩查询入口,请输入你的成绩:" cj
if [ $cj -lt 60 ];then
echo "成绩不及格......."
elif [ $cj -gt 80 ];then
echo "成绩优秀........."
else
echo "要好好学习......."
fi
[root@manage if]# sh +x var02.sh
成绩查询入口,请输入你的成绩:56
成绩不及格.......
[root@manage if]# sh +x var02.sh
成绩查询入口,请输入你的成绩:88
成绩优秀.........
[root@manage if]# sh +x var02.sh
成绩查询入口,请输入你的成绩:70
要好好学习.......
#需求2:根据输入一个用户名称, read $1 <--test
1.判断输入的用户是否存在当前系统,
2.如不在再次判断用户是否在/home下拥有家目录
3.如果都没有则提示不存在。
#方法1:
[root@manage if]# cat var03.sh
#!/bin/bash
if grep $1 /etc/passwd &>/dev/null;then
echo "$1用户存在于系统中"
elif ls -ld /home/$1 &>/dev/null;then
echo "$1用户不存在于系统中,但有家目录"
else
echo "$1用户不存在系统中,也没有家目录"
fi
[root@manage if]# useradd ttt
[root@manage if]# sh -x var03.sh ttt
+ grep ttt /etc/passwd
+ echo ttt用户存在于系统中
ttt用户存在于系统中
[root@manage if]# userdel ttt
[root@manage if]# sh -x var03.sh ttt
+ grep ttt /etc/passwd
+ ls -ld /home/ttt
+ echo ttt用户不存在于系统中,但有家目录
ttt用户不存在于系统中,但有家目录
[root@manage if]# rm -rf /home/ttt/
[root@manage if]# sh -x var03.sh ttt
+ grep ttt /etc/passwd
+ ls -ld /home/ttt
+ echo ttt用户不存在系统中,也没有家目录
ttt用户不存在系统中,也没有家目录
#方法2:
[root@manage if]# cat var03.sh
#!/bin/bash
grep_user=$(grep $1 /etc/passwd &>/dev/null)
grep_rc=$?
cat_dir=$(ls -ld /home/$1 &>/dev/null)
cat_rc=$?
if [ $grep_rc -eq 0 ];then
echo "$1用户存在于系统中"
elif [ $cat_rc -eq 0 ];then
echo "$1用户不存在于系统中,但有家目录"
else
echo "$1用户不存在系统中,也没有家目录"
fi
[root@manage if]# sh -x var03.sh root
++ grep root /etc/passwd
+ grep_user=
+ grep_rc=0
++ ls -ld /home/root
+ cat_dir=
+ cat_rc=2
+ '[' 0 -eq 0 ']'
+ echo root用户存在于系统中
root用户存在于系统中
#需求3:通过脚本传入两个参数,进行整数关系比较。
#比如: var04.sh [ 1 2 | 2 2 | 2 3 ],请使用双分支和多分支两种方式实现。
#第一种:多分支实现
[root@manage if]# cat var04.sh
#!/bin/bash
if [ $1 -eq $2 ];then
echo "$1 = $2"
elif [ $1 -lt $2 ];then
echo "$1 < $2"
else
echo "$1 > $2"
fi
[root@manage if]# sh var04.sh 2 3
2 < 3
[root@manage if]# sh var04.sh 3 2
3 > 2
[root@manage if]# sh var04.sh 3 3
3 = 3
#第二种:双分支实现
[root@manage if]# cat var05.sh
#!/bin/bash
if [ $1 -eq $2 ];then
echo "$1 = $2"
else
if [ $1 -lt $2 ];then
echo "$1 < $2"
else
echo "$1 > $2"
fi
fi
[root@manage if]# sh var05.sh 1 2
1 < 2
[root@manage if]# sh var05.sh 2 1
2 > 1
[root@manage if]# sh var05.sh 2 2
2 = 2
#需求1:备份/etc/hosts 文件到指定的目录下(先判断目录存在不存在,不存在则创建)
[root@manage if]# cat var06.sh
#!/bin/bash
read -p "请输入要备份的文件:" src
read -p "请输入备份的目标目录:" desc
[ -d $desc ] || mkdir -p $desc
cp -rp $src $desc
[root@manage if]# sh -x var06.sh
+ read -p 请输入要备份的文件: src
请输入要备份的文件:/etc/hosts
+ read -p 请输入备份的目标目录: desc
请输入备份的目标目录:/opt/ttt/qqq/test/
+ '[' -d /opt/ttt/qqq/test/ ']'
+ mkdir -p /opt/ttt/qqq/test/
+ cp -rp /etc/hosts /opt/ttt/qqq/test/
#需求2:备份mysql,手动输入你需要备份的库名称, 备份到输入目录/时间/xx.sql
[root@manage if]# cat var07.sh
#!/bin/bash
mysql -uroot -pzabbix -e "show databases"
read -p "请输入要备份的库名: " dbname
read -p "请输入要备份的目标位置:" desc
Date=$(date +%F)
Path=${desc}/${Date}
[ -d ${Path} ] || mkdir -p ${Path}
mysqldump -uroot -pzabbix -B $dbname > ${Path}/$dbname.sql
[root@manage if]# sh -x var07.sh
+ mysql -uroot -pzabbix -e 'show databases'
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| zabbix |
+--------------------+
+ read -p '请输入要备份的库名: ' dbname
请输入要备份的库名: mysql
+ read -p 请输入要备份的目标位置: desc
请输入要备份的目标位置:/backup/mysql/
++ date +%F
+ Date=2022-04-16
+ Path=/backup/mysql//2022-04-16
+ '[' -d /backup/mysql//2022-04-16 ']'
+ mkdir -p /backup/mysql//2022-04-16
+ mysqldump -uroot -pzabbix -B mysql
[root@manage if]# ll /backup/mysql/2022-04-16/mysql.sql
-rw-r--r-- 1 root root 515152 Apr 16 19:02 /backup/mysql/2022-04-16/mysql.sql
#方法2,不输入库名和目标目录
[root@manage if]# cat var07.sh
#!/bin/bash
Date=$(date +%F)
Path=/date/backup/mysql/${Date}
#判断目标目录是否存在,如果不存在就创建
[ -d /date/backup/mysql/${Date} ] || mkdir -p /date/backup/mysql/${Date}
#执行备份命令
mysqldump -uroot -pzabbix -B mysql> ${Path}/mysql.sql
[root@manage if]# sh -x var07.sh
++ date +%F
+ Date=2022-04-16
+ Path=/date/backup/mysql/2022-04-16
+ '[' -d /date/backup/mysql/2022-04-16 ']'
+ mkdir -p /date/backup/mysql/2022-04-16
+ mysqldump -uroot -pzabbix -B mysql
[root@manage if]# ll /date/backup/mysql/2022-04-16/mysql.sql
-rw-r--r-- 1 root root 515152 Apr 16 18:53 /date/backup/mysql/2022-04-16/mysql.sql
比较字符 | 含义 | 示例 |
---|---|---|
-eq | 等于则条件为真 | [ 1 -eq 10 ] |
-lt | 小于则条件为真 | [ 1 -lt 10 ] |
-le | 小于等于则条件为真 | [ 1 -le 10 ] |
-ne | 不等于则条件为真 | [ 1 -ne 10 ] |
-gt | 大于则条件为真 | [ 1 -gt 10 ] |
-ge | 大于等于则条件为真 | [ 1 -ge 10 ] |
语法示例
#等于
[root@manage if]# [ 1 -eq 1 ] && echo $?
0
[root@manage if]# [ 1 -eq 2 ] && echo $?
#大于等于
[root@manage if]# [ 11 -ge 1 ] && echo "成立" || echo "不成立"
成立
#小于
[root@manage if]# [ 11 -lt 1 ] && echo "成立" || echo "不成立"
不成立
#不等于
[root@manage if]# [ 11 -ne 1 ] && echo "成立" || echo "不成立"
成立
#需求1:用户执行脚本,sh status.sh nginx,则检查nginx服务的运行状态。(仅支持传递一个参数)
1.检查nginx状态 systemctl status nginx
2.状态结果非0 则提示未启动
3.状态结果为0 则提示已启动
[root@manage if]# cat var08.sh
#!/bin/bash
#1.控制传参的个数为一个
if [ $# -ne 1 ];then
echo "USAGE: $0 {nginx | rsyncd | sshd | all service name}"
exit
fi
systemctl status $1 &>/dev/null
rc=$?
if [ $rc -eq 0 ];then
echo "$1 已启动"
else
echo "$1 未启动"
fi
[root@manage if]# sh var08.sh nginx
nginx 未启动
[root@manage if]# sh var08.sh sshd
sshd 已启动
#需求2:查看磁盘/当前使用状态,如果使用率超过80%则报警发邮件
[root@manage if]# cat var09.sh
#!/bin/bash
disk_user=`df -h |awk '/\/$/ {print $(NF-1)}'`
#此处需要用/将磁盘的%号去掉
if [ ${disk_user%\%} -ge 80 ];then
echo "邮件报警中...."
sleep 5
echo "邮件发送完成,当前磁盘使用率为:${disk_user}"
fi
[root@manage if]# sh +x var09.sh
邮件报警中....
邮件发送完成,当前磁盘使用率为:90%
#需求3:单分支,判断当前用户是不是root,如果不是那么返回“ERROR”
#1.通过整数比对
[root@manage if]# cat var10.sh
#!/bin/bash
if [ $UID -ne 0 ];then
echo "ERROR"
exit
fi
#2.通过字符比对
[root@manage if]# cat var11.sh
#!/bin/bash
if [ $USER != "root" ];then
echo "ERROR"
exit
fi
#需求4:双分支,判断当前登录用户是管理员还是普通用户,如果是管理员输出”hey admin“ 如果是普通用户输出”hey guest“
[root@manage if]# cat var12.sh
#!/bin/bash
if [ $UID -eq 0 ];then
echo "hey admin"
else
echo "hey guest"
fi
#需求5:备份filename文件至/backup/system/filename-2022-04-16,如果该目录不存在则自动创建
[root@manage if]# cat var13.sh
#!/bin/bash
read -p "请输入要备份的文件:" file
Date=$(date +%F)
Desc=/backup/system
[ -d ${Desc} ] || mkdir -p $Desc
cp -rpv $file $Desc/filename-${Date}
[root@manage if]# sh +x var13.sh
请输入要备份的文件:/etc/hosts
‘/etc/hosts’ -> ‘/backup/system/filename-2022-04-16/hosts’
#需求6:继需求5,判断备份的文件是否存在,如果不存在则提示”No such file or directory“,然后退出
[root@manage if]# cat var13.sh
#!/bin/bash
read -p "请输入要备份的文件:" file
Date=$(date +%F)
Desc=/backup/system
#1.判断文件是否存在
if [ ! -f $file ];then
echo "$file No such file or directory"
exit
fi
[ -d ${Desc} ] || mkdir -p $Desc
cp -rpv $file $Desc/filename-${Date}
[root@manage if]# sh +x var13.sh
请输入要备份的文件:/etc/qqq
/etc/qqq No such file or directory
#需求7:继需求5、6,判断备份的文件是否为空,如果为空则提示"This is file empty",然后退出
[root@manage if]# cat var13.sh
#!/bin/bash
read -p "请输入要备份的文件:" file
Date=$(date +%F)
Desc=/backup/system
#1.判断文件是否存在
if [ ! -f $file ];then
echo "$file No such file or directory"
exit
fi
#2.判断文件为空,则报错
if [ ! -s $file ];then
echo "$file This is file empty"
exit
fi
#3.判断目标目录是否存在,如果不存在则创建
if [ ! -d ${Desc} ];then
mkdir -p $Desc
fi
cp -rpv $file $Desc/filename-${Date}
[root@manage if]# sh +x var13.sh
请输入要备份的文件:/etc/qqq
/etc/qqq This is file empty
[root@manage if]# sh +x var13.sh
请输入要备份的文件:/etc/hosts
‘/etc/hosts’ -> ‘/backup/system/filename-2022-04-16/hosts’
[root@manage if]# sh +x var13.sh
请输入要备份的文件:/etc/ttt
/etc/ttt No such file or directory
字符串比较
参数 | 说明 | 示例 | 解释 |
---|---|---|---|
== | 等于则条件为真 | [ “ a " = = " a" == " a"=="b” ] | |
!= | 不相等则条件为真 | [ “ a " ! = " a" != " a"!="b” ] | |
-z | 字符串的长度为0则为真 | [ -z “$a” ] | 内容空则为真 |
-n | 字符串的长度不为空则为真 | [ -n “$a” ] | 有内容则为真 |
1.字符串比对,必须加双引号
[root@manage if]# [ "$USER" = "root" ];echo $?
0
[root@manage if]# [ "$USER" = "tomcat" ];echo $?
1
[root@manage if]# [ "$USER" != "tomcat" ];echo $?
0
[root@manage if]# bbb=""
[root@manage if]# echo ${#bbb}
0
#字符长度为0
[root@manage if]# [ -z "$bbb" ]
[root@manage if]# echo $?
0
#字符长度不为0
[root@manage if]# [ -n "$bbb" ]
[root@manage if]# echo $?
1
#示例:输入不为空的值,打印出来,如果输入空值,提示不能输入空值
[root@manage if]# cat var14.sh
#!/bin/bash
read -p "请输入一个数字:" num
if [ -z $num ];then
echo "请不要输入空值...."
else
echo "你输入的数字是:$num"
fi
[root@manage if]# sh +x var14.sh
请输入一个数字: #直接按回车
请不要输入空值....
[root@manage if]# sh +x var14.sh
请输入一个数字:10
你输入的数字是:10
2.整数多条件比对
[root@manage if]# [ 1 -lt 2 -a 5 -gt 10 ];echo $?
1
[root@manage if]# [ 1 -lt 2 -o 5 -gt 10 ];echo $?
0
[root@manage if]# [ 1 -lt 2 ] && [ 5 -gt 10 ];echo $?
1
[root@manage if]# [ 1 -lt 2 ] || [ 5 -gt 10 ];echo $?
0
#正则比对会使用到[[]](&&且 ||或者)
[root@manage if]# [[ 1 -lt 2 && 5 -gt 10 ]];echo $?
1
[root@manage if]# [[ 1 -lt 2 || 5 -gt 10 ]];echo $?
0
#需求1:提示学生输入自己的成绩。
1.如果分数大于0小于59提示补考。
2.如果分数大于60小于70提示良好。
3.如果分数大于71小于85提示好。
4.如果分数大于86小于100提示优秀。
5.不允许输入空值.
6.必须输入的是全数字.
[root@manage if]# cat var15.sh
#!/bin/bash
# **********************************************************
# * Author : qqq
# * Email : [email protected]
# * Create time : 2022-04-17 10:02
# * Filename : var15.sh
# * Description :
# **********************************************************
read -p "请输入自己的成绩:" cj
if [ -z $cj ];then
echo "请不要输入空值,谢谢.."
exit 1
fi
#除了数字0-9以外的,其他都匹配
if [[ ! $cj =~ ^[0-9]+$ ]];then
echo "请输入纯数字....."
exit 2
fi
if [ $cj -ge 0 ] && [ $cj -le 59 ];then
echo "你的成绩为:$cj 准备补考"
elif [ $cj -ge 60 ] && [ $cj -le 70 ];then
echo "你的成绩为:$cj 成绩及格"
elif [ $cj -ge 71 ] && [ $cj -le 85 ];then
echo "你的成绩为:$cj 成绩良好"
elif [ $cj -ge 86 ] && [ $cj -le 100 ];then
echo "你的成绩为:$cj 成绩优秀"
else
echo "请输入100以内的数字....."
fi
[root@manage if]# sh var15.sh
请输入自己的成绩:12
你的成绩为:12 准备补考
[root@manage if]# sh var15.sh
请输入自己的成绩:56
你的成绩为:56 准备补考
[root@manage if]# sh var15.sh
请输入自己的成绩:67
你的成绩为:67 成绩及格
[root@manage if]# sh var15.sh
请输入自己的成绩:89
你的成绩为:89 成绩优秀
[root@manage if]# sh var15.sh
请输入自己的成绩:101
请输入100以内的数字.....
[root@manage if]# sh var15.sh
请输入自己的成绩:aaa
请输入纯数字.....
正则表达式匹配示例
[root@manage if]# num=1111
[root@manage if]# [[ "$num" =~ ^[0-9]+$ ]];echo $?
0
[root@manage if]#
[root@manage if]# num=aaa
[root@manage if]# [[ "$num" =~ ^[a-z]+$ ]];echo $?
0
[root@manage if]# num=aaA
[root@manage if]# [[ "$num" =~ ^[a-Z]+$ ]];echo $?
0
[root@manage if]# num=AAA
[root@manage if]# [[ "$num" =~ ^[A-Z]+$ ]];echo $?
0
[root@manage if]# num=AAAaa
[root@manage if]# [[ "$num" =~ ^[A-Z]+$ ]];echo $?
1
[root@manage if]# num=AAA123
[root@manage if]# [[ "$num" =~ ^[A-Z]+$ ]];echo $?
1
[root@manage if]# num=aaa
[root@manage if]# [[ "$num" =~ ^[A-Z]+$ ]];echo $?
1
#需求1:使用for循环打印一推单词,然后仅输出以r开头的单词
[root@manage if]# sh +x var16.sh
rx
rw
red
[root@manage if]# cat var16.sh
#!/bin/bash
for var in ab ac rx rw tt red
do
if [[ "$var" =~ ^r ]];then
echo $var
fi
done
[root@manage if]# sh +x var16.sh
rx
rw
red
#需求2:编写一个创建用户的脚本。
1.提示用户输入要创建用户的前缀,必须是英文。 test
2.提示用户输入后缀,必须是数字。 123
3.如果前缀和后缀都没有问题,则进行用户创建。
[root@manage if]# cat var17.sh
#!/bin/bash
read -p "请输入要创建的用户名前缀:" name
if [[ ! "$name" =~ ^[a-Z]+$ ]];then
echo "请输入纯字符..."
exit 1
fi
read -p "请输入要创建的用户名后缀:" num
if [[ ! "$num" =~ ^[0-9]+$ ]];then
echo "请输入纯数字..."
exit 2
fi
user_name=$name$num
echo $user_name
id $user_name &>/dev/null
if [ $? -eq 0 ];then
echo "$user_name用户已存在"
exit 3
else
useradd $user_name
echo "$user_name用户创建成功"
fi
[root@manage if]# sh + var17.sh
请输入要创建的用户名前缀:qqq
请输入要创建的用户名后缀:111
qqq111
qqq111用户创建成功
#需求1.使用root用户清空/var/log/messages日志,并每次执行保留最近100行
[root@manage if]# cat var18.sh
#!/bin/bash
Log_path=/var/log/messages
if [ $UID -ne 0 ] ;then
echo "Permission denied"
exit 1
fi
if [ -f $Log_path ];then
#先提取100行的内容写入新的文件
tail -100 ${Log_path} > ${Log_path}_bak
#将新的文件重新写入/var/log/messages中
cat ${Log_path}_bak > ${Log_path}
#删除备份文件
rm -f ${Log_path}_bak
#输出结果
echo "clean log done....."
else
echo "$Log_Path No such file or directory"
exit 2
fi
[root@manage if]# sh -x var18.sh
+ Log_path=/var/log/messages
+ '[' 0 -ne 0 ']'
+ '[' -f /var/log/messages ']'
+ tail -100 /var/log/messages
+ cat /var/log/messages_bak
+ rm -f /var/log/messages_bak
+ echo 'clean log done.....'
clean log done.....
[root@manage if]# wc -l /var/log/messages
100 /var/log/messages
#需求2:判断httpd服务是否正常启动, 脚本名必须为httpd_deamon.sh $$
1.手动如何看这个服务是正常的
1.ps
2.losf netstat
3.curl 200 301 302
4.systemctl
[root@manage if]# cat var19.sh
#!/bin/bash
systemctl status httpd >/dev/null
if [ $? -eq 0 ];then
echo "httpd is ok...."
else
systemctl start httpd >/dev/null
if [ $? -eq 0 ];then
echo "httpd重启ok..."
else
echo "httpd重启失败...."
fi
fi
方式2:
[root@manage if]# cat var19.sh
#!/bin/bash
Httpd_status=$(ps aux|grep httpd | grep -v grep |wc -l)
if [ $Httpd_status -ge 1 ];then
echo "httpd service is ok"
else
systemctl start httpd &>/dev/null
if [ $? -eq 0 ];then
echo "重新拉起成功"
else
echo "重新拉起失败"
fi
fi
方式3:
[root@manage if]# cat var19.sh
#!/bin/bash
Httpd_Status=$(curl -sI localhost | awk '/HTTP/ {print $2}')
if [[ "$Httpd_Status" -eq 200 || "$Httpd_Status" -eq 301 || "$Httpd_Status" -eq 302 ]];then
echo "Httpd is ok ...."
else
echo "Httpd is down...."
echo "尝试复活中......."
sleep 3
systemctl start httpd &>/dev/null
if [ $? -eq 0 ];then
echo "复活成功"
else
echo "复活失败"
fi
fi
#需求3:根据不同的系统版本,配置不同的yum源
1.获取相同系统,不同的版本
2.根据不同系统的不同版本实现
1.判断是centos还是ubuntu
2.根据判断的条件进入嵌套if
[root@manage if]# cat var20.sh
#!/bin/bash
system_status=$(cat /etc/redhat-release | awk '{print $(NF-1)}')
if [ ${system_status%%.*} -eq 7 ];then
echo "systemctl 7"
elif [ ${system_status%%.*} -eq 6 ];then
echo "systemctl 6"
fi
2.根据不同的系统配置不同yum源
#大致思路,脚本不全
if [ $system == "Centos" ];then
if [ 如果6 ];then
echo"执行6的安装"
elif [ 如果是7 ];then
echo"执行7的安装"
else
echo "无法识别"
fi
elif [ $system == "ubuntu" ];then
if [ 如果6 ];then
echo"执行6的安装"
elif [ 如果是7 ];then
echo"执行7的安装"
else
echo "无法识别"
else
echo "anway"
exit
fi
#需求4:安装不同版本的PHP方式,使用echo输出即可,不用真的安装。
1.给一个选择的菜单
2.给一个数字编号 1 2 3 4
3.根据用户的选择进行判断
[root@manage if]# cat var20.sh
#!/bin/bash
clear
cat <<EOF
=====================================
1) Installed PHP 5.5
2) Installed PHP 7.0
3) Installed PHP 7.3
4) quit
=====================================
EOF
read -p "请输入你要安装的版本[ 1 | 2 | 3 | 4 ]: " Action
#判断是否为空值
if [ -z $Action ];then
echo "请不要输入空值...."
exit 1
fi
#必须输入数字
if [[ ! $Action =~ ^[0-9]+$ ]];then
echo "仅支持1位数字"
exit 2
fi
#判断
if [ $Action -eq 1 ];then
echo "1)Installed PHP 5.5"
elif [ $Action -eq 2 ];then
echo "2)Installed PHP 7.0"
elif [ $Action -eq 3 ];then
echo "3)Installed PHP 7.5"
else
exit 1
fi
#需求5:写一个脚本,提示用户输入身高,如果身高达到180以上全票,120以下免票,其余不能进。
1.需要交互
2.判断 超过180
3.判断 低于120
4.其他 over
[root@manage if]# cat var21.sh
#!/bin/bash
read -p "请输入身高:" Action
if [ $Action -ge 180 ];then
echo "全票....."
else
if [ $Action -lt 120 ];then
echo "免费......"
else
echo "不让进....."
fi
fi
#需求6:写一个Nginx安装脚本,加入判断,当上一步执行成功在执行下一步,否则退出脚本
1.网络
2.源
3.安装
4.判断
[root@manage if]# cat var22.sh
#!/bin/bash
#1网络
ping -W1 -c1 www.baidu.com &>/dev/null
if [ $? -ne 0 ];then
echo "网络不通....."
exit 1
fi
#2.源 记得要判断系统
if [ -f /etc/yum.repos.d/epel.repo ];then
if [ -s /etc/yum.repos.d/epel.repo ];then
echo "yum repos skip....."
else
echo "epel 为空 wget ...."
#wget
fi
else
echo "epel文件不存在"
#wget
fi
#3.安装
rpm -q nginx &>/dev/null
rc=$?
if [ $rc -eq 0 ];then
echo "nginx已安装"
else
yum install nginx -y
fi
#需求7:在每月第一天备份并压缩/etc目录的所有内容,存放到/opt/bak目录,存放的形式
[root@manage if]# cat var23.sh
#!/bin/bash
Date=$(date +%F)
Desc_dir=/opt/bak
#准备存放的目录
if [ ! -d $Desc_dir ];then
mkdir -p $Desc_dir
fi
#打包并放到对应的目录
cd / && tar czf $Desc_dir/${Date}_etc.tar.gz etc
if [ ! $? -eq 0 ];then
echo "备份失败....."
fi
[root@manage if]# sh -x var23.sh
++ date +%F
+ Date=2022-04-17
+ Desc_dir=/opt/bak
+ '[' '!' -d /opt/bak ']'
+ mkdir -p /opt/bak
+ cd /
+ tar czf /opt/bak/2022-04-17_etc.tar.gz etc
+ '[' '!' 0 -eq 0 ']'
[root@manage if]# ll /opt/bak/2022-04-17_etc.tar.gz
-rw-r--r-- 1 root root 11229837 Apr 17 15:12 /opt/bak/2022-04-17_etc.tar.gz
#需求8:监控内存小于500M和磁盘容量小于10G,则发邮件报警
1.剩余内存低于500M free -m |awk '/^Mem/ {print $NF}'
2.剩余磁盘低于10G df -h|awk '/\/$/ {print $(NF-2)}'
[root@manage if]# cat var24.sh
#!/bin/bash
Free=$(free -m |awk '/^Mem/ {print $NF}')
Disk=$(df -h|awk '/\/$/ {print $(NF-2)}')
if [ $Free -lt 500 -a ${Disk%G} -lt 10 ];then
echo "报警"
else
echo "内存是:$Free M,磁盘是:$Disk"
fi
[root@manage if]# sh +x var24.sh
内存是:1395 M,磁盘是:26G
#需求9:检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员
[root@manage if]# cat var25.sh
#!/bin/bash
if [ $UID -eq 0 ];then
yum install vsftpd -y >/dev/null
else
echo "你不是管理员...."
exit
fi
#需求10:输入三个数并进行升序排序
[root@manage if]# cat var26.sh
#!/bin/bash
if [ ! $# -eq 3 ];then
echo "请输入3个参数"
exit 1
fi
echo "$1 $2 $3 "|xargs -n1 | sort -n
[root@manage if]# sh var26.sh 1 29 7
1
7
29
[root@manage if]# sh var26.sh d h q
d
h
q
#需求11:根据用户输入密码位数,生产随机密码(包含数字、大小写字母、特殊符号)
1.怎么生成随机数 mkpasswd -l 8
2.控制输入的长度,最少8位
[root@manage if]# cat var27.sh
#!/bin/bash
read -p "请输入你想生成的随机数密码位数:" Action
#控制回车
if [ -z $Action ];then
echo "请不要输入回车"
exit 1
fi
#控制必须是数字
if [[ ! $Action =~ ^[0-9]+$ ]];then
echo "请输入数字"
exit 2
fi
if [[ $Action -ge 7 && $Action -lt 20 ]];then
mkpasswd -l $Action
else
echo "密码复杂度必须7位以上20位以下"
fi
[root@manage if]# sh var27.sh
请输入你想生成的随机数密码位数:
请不要输入回车
[root@manage if]# sh var27.sh
请输入你想生成的随机数密码位数:10
nZqm3ge0B*
[root@manage if]# sh var27.sh
请输入你想生成的随机数密码位数:111
密码复杂度必须7位以上20位以下
#需求12:提示用户输入年份后判断该年是否为闰年 能整除4, 并且不能被100整除则为 闰年
2012 / 4 = 整数 -a 2012 / 100 = 有余数
1.传递年份 2012 2013
2.用年份除以4
2.1 在用年份除以100
如果有余数 则是润年
如果没有 则是平年
#方式1:
[root@manage if]# cat var28.sh
#!/bin/bash
read -p "请输入你想要检测的年份:" Action
#1.先除以4
rn=$(( ${Action} % 4 ))
rn_2=$(( ${Action} % 100 ))
rn_3=$(( ${Action} % 400 ))
#1.判断是否能被400整除
if [ $rn_3 -eq 0 ];then
echo "$Action为闰年"
exit
else
#2.没有被400整除的,先除以4
if [ $rn -eq 0 ];then
#3.成立,在除以100,有余数则为闰年
if [ $rn_2 -ne 0 ];then
echo "$Action为闰年"
exit
fi
fi
fi
echo "$Action为平年"
[root@manage if]# sh var28.sh
请输入你想要检测的年份:2004
2004为闰年
[root@manage if]# sh var28.sh
请输入你想要检测的年份:2005
2005为平年
#方式2:
[root@manage if]# cat var29.sh
#!/bin/bash
read -p "请输入年份:" Y
if [ $[$Y%4] -eq 0 -a $[$Y%100] -ne 0 ] || [ $[$Y%400] -eq 0 ];then
echo "$Y是闰年"
else
echo "$Y是平年"
fi
[root@manage if]# sh var29.sh
请输入年份:2004
2004是闰年
[root@manage if]# sh var29.sh
请输入年份:2005
2005是平年
[root@manage if]# sh var29.sh
请输入年份:2006
2006是平年