shell脚本—if语句

文章目录

  • shell脚本—if语句
    • 1.什么是if
    • 2.if算数比较运算符(整数比较)
    • 3.if字符串比较运算符(字符串需要加引号)
    • 4.if文件比较与检查(-f -d -e ...... )
    • 5.if的基础语法
      • 3.1基于文件的条件比对
      • 3.2流程控制语句if整数比对
      • 3.3 if基于字符比较
      • 3.4 if判断练习

1.什么是if

if是模仿人类的判断来进行的,只有true和false两种结果

2.if算数比较运算符(整数比较)

比较字符 含义 示例
-eq 等于则条件为真 [ 1 -eq 10 ]
-lt 小于则条件为真 [ 1 -lt 10 ]
-le 小于等于则条件为真 [ 1 -le 10 ]
-ne 不等于则条件为真 [ 1 -ne 10 ]
-gt 大于则条件为真 [ 1 -gt 10 ]
-ge 大于等于则条件为真 [ 1 -ge 10 ]

3.if字符串比较运算符(字符串需要加引号)

比较字符 含义 比较字符 含义
== 相等 != 不等
-n 检查字符串长度是否大于0 -z 检查字符串长度是否为0

4.if文件比较与检查(-f -d -e … )

文件比较运算符 含义 示例
-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 ]

5.if的基础语法

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 "成绩查询入口,请输入你的成绩:" cjif [ $cj -lt 60 ];thenecho "成绩不及格......."
elif [ $cj -gt 80 ];thenecho "成绩优秀........."
elseecho "要好好学习......."
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   <--test1.判断输入的用户是否存在当前系统,2.如不在再次判断用户是否在/home下拥有家目录3.如果都没有则提示不存在。#方法1:
[root@manage if]# cat var03.sh
#!/bin/bash
if grep $1 /etc/passwd &>/dev/null;thenecho "$1用户存在于系统中"
elif ls -ld /home/$1 &>/dev/null;thenecho "$1用户不存在于系统中,但有家目录"
elseecho "$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 ];thenecho "$1用户存在于系统中"
elif [ $cat_rc -eq 0 ];thenecho "$1用户不存在于系统中,但有家目录"
elseecho "$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 ];thenecho "$1 = $2"
elif [ $1 -lt $2 ];thenecho "$1 < $2"
elseecho "$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 ];thenecho "$1 = $2"
elseif [ $1 -lt $2 ];thenecho "$1 < $2"elseecho "$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

3.1基于文件的条件比对

#需求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

3.2流程控制语句if整数比对

比较字符 含义 示例
-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 nginx2.状态结果非0 则提示未启动3.状态结果为0 则提示已启动[root@manage if]# cat var08.sh
#!/bin/bash
#1.控制传参的个数为一个
if [ $# -ne 1 ];thenecho "USAGE: $0 {nginx | rsyncd | sshd | all service name}"exit
fisystemctl status $1 &>/dev/null
rc=$?
if [ $rc -eq 0 ];thenecho "$1 已启动"
elseecho "$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/bashdisk_user=`df -h |awk '/\/$/ {print $(NF-1)}'`
#此处需要用/将磁盘的%号去掉
if [ ${disk_user%\%} -ge 80 ];thenecho "邮件报警中...."sleep 5echo "邮件发送完成,当前磁盘使用率为:${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 ];thenecho "ERROR"exit
fi#2.通过字符比对
[root@manage if]# cat var11.sh
#!/bin/bash
if [ $USER != "root" ];thenecho "ERROR"exit
fi
#需求4:双分支,判断当前登录用户是管理员还是普通用户,如果是管理员输出”hey admin“ 如果是普通用户输出”hey guest“
[root@manage if]# cat var12.sh
#!/bin/bash
if [ $UID -eq 0 ];thenecho "hey admin"
elseecho "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 ];thenecho "$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 ];thenecho "$file No such file or directory"exit
fi
#2.判断文件为空,则报错
if [ ! -s $file ];thenecho "$file This is file empty"exit
fi
#3.判断目标目录是否存在,如果不存在则创建
if [ ! -d ${Desc} ];thenmkdir -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

3.3 if基于字符比较

字符串比较

参数 说明 示例 解释
== 等于则条件为真 [ “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 "请输入一个数字:" numif [ -z $num ];thenecho "请不要输入空值...."
elseecho "你输入的数字是:$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         : xxxxx@163.com
# * Create time   : 2022-04-17 10:02
# * Filename      : var15.sh
# * Description   :
# **********************************************************
read -p "请输入自己的成绩:" cj
if [ -z $cj ];thenecho "请不要输入空值,谢谢.."exit 1
fi
#除了数字0-9以外的,其他都匹配
if [[ ! $cj =~ ^[0-9]+$ ]];thenecho "请输入纯数字....."exit 2
fi
if [ $cj -ge 0 ] && [ $cj -le 59 ];thenecho "你的成绩为:$cj 准备补考"elif [ $cj -ge 60 ] && [ $cj -le 70 ];thenecho "你的成绩为:$cj 成绩及格"elif [ $cj -ge 71 ] && [ $cj -le 85 ];thenecho "你的成绩为:$cj 成绩良好"elif [ $cj -ge 86 ] && [ $cj -le 100 ];thenecho "你的成绩为:$cj 成绩优秀"elseecho "请输入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
doif [[ "$var" =~ ^r ]];thenecho $var
fi
done[root@manage if]# sh +x var16.sh
rx
rw
red
#需求2:编写一个创建用户的脚本。1.提示用户输入要创建用户的前缀,必须是英文。  test2.提示用户输入后缀,必须是数字。           1233.如果前缀和后缀都没有问题,则进行用户创建。[root@manage if]# cat var17.sh
#!/bin/bash
read -p "请输入要创建的用户名前缀:" nameif [[ ! "$name" =~ ^[a-Z]+$ ]];thenecho "请输入纯字符..."exit 1
firead -p "请输入要创建的用户名后缀:" num
if [[ ! "$num" =~ ^[0-9]+$ ]];thenecho "请输入纯数字..."exit 2
fiuser_name=$name$num
echo $user_name
id $user_name &>/dev/null
if [ $? -eq 0 ];thenecho "$user_name用户已存在"exit 3
elseuseradd $user_nameecho "$user_name用户创建成功"
fi[root@manage if]# sh + var17.sh
请输入要创建的用户名前缀:qqq
请输入要创建的用户名后缀:111
qqq111
qqq111用户创建成功

3.4 if判断练习

#需求1.使用root用户清空/var/log/messages日志,并每次执行保留最近100行
[root@manage if]# cat var18.sh
#!/bin/bash
Log_path=/var/log/messages
if [ $UID -ne 0 ] ;thenecho "Permission denied"exit 1
fiif [ -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....."
elseecho "$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.ps2.losf netstat3.curl  200 301 302 4.systemctl[root@manage if]# cat var19.sh
#!/bin/bash
systemctl status httpd >/dev/nullif [ $? -eq 0 ];thenecho "httpd is  ok...."
elsesystemctl start httpd >/dev/nullif [ $? -eq 0 ];thenecho "httpd重启ok..."elseecho "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 ];thenecho "httpd service is ok"
elsesystemctl start httpd &>/dev/nullif [ $? -eq 0 ];thenecho "重新拉起成功"elseecho "重新拉起失败"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 ]];thenecho "Httpd is ok ...."
elseecho "Httpd is down...."echo "尝试复活中......."sleep 3systemctl start httpd &>/dev/nullif [ $? -eq 0 ];thenecho "复活成功"elseecho "复活失败"fi
fi
#需求3:根据不同的系统版本,配置不同的yum源1.获取相同系统,不同的版本2.根据不同系统的不同版本实现1.判断是centos还是ubuntu2.根据判断的条件进入嵌套if
[root@manage if]# cat var20.sh
#!/bin/bash
system_status=$(cat /etc/redhat-release  | awk '{print $(NF-1)}')if [ ${system_status%%.*} -eq 7 ];thenecho "systemctl 7"
elif [ ${system_status%%.*} -eq 6 ];thenecho "systemctl 6"
fi2.根据不同的系统配置不同yum源
#大致思路,脚本不全if [ $system == "Centos" ];thenif [ 如果6 ];thenecho"执行6的安装"elif [ 如果是7 ];thenecho"执行7的安装"elseecho "无法识别"fielif [ $system == "ubuntu" ];thenif [ 如果6 ];thenecho"执行6的安装"elif [ 如果是7 ];thenecho"执行7的安装"elseecho "无法识别"elseecho "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 ];thenecho "请不要输入空值...."exit 1
fi#必须输入数字
if [[ ! $Action =~ ^[0-9]+$ ]];thenecho "仅支持1位数字"exit 2
fi#判断
if [ $Action -eq 1 ];thenecho "1)Installed PHP 5.5"elif [ $Action -eq 2 ];thenecho "2)Installed PHP 7.0"elif [ $Action -eq 3 ];thenecho "3)Installed PHP 7.5"
elseexit 1
fi
#需求5:写一个脚本,提示用户输入身高,如果身高达到180以上全票,120以下免票,其余不能进。1.需要交互2.判断  超过1803.判断  低于1204.其他  over[root@manage if]# cat var21.sh
#!/bin/bash
read -p "请输入身高:" Action
if [ $Action -ge 180 ];thenecho "全票....."
elseif [ $Action -lt 120 ];thenecho "免费......"elseecho "不让进....."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 ];thenecho "网络不通....."exit 1
fi#2.源  记得要判断系统
if [ -f /etc/yum.repos.d/epel.repo ];thenif [ -s /etc/yum.repos.d/epel.repo ];thenecho "yum repos skip....."elseecho "epel 为空 wget ...."#wgetfielseecho "epel文件不存在"#wget
fi#3.安装
rpm -q nginx &>/dev/null
rc=$?if [ $rc -eq 0 ];thenecho "nginx已安装"
elseyum 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 ];thenmkdir -p $Desc_dir
fi#打包并放到对应的目录
cd / && tar czf $Desc_dir/${Date}_etc.tar.gz etcif [ ! $? -eq 0 ];thenecho "备份失败....."
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 ];thenecho "报警"
elseecho "内存是:$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 ];thenyum install vsftpd -y >/dev/null
elseecho "你不是管理员...."exit
fi
#需求10:输入三个数并进行升序排序
[root@manage if]# cat var26.sh
#!/bin/bash
if [ ! $# -eq 3 ];thenecho "请输入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 ];thenecho "请不要输入回车"exit 1
fi#控制必须是数字
if [[ ! $Action =~ ^[0-9]+$ ]];thenecho "请输入数字"exit 2
fiif [[ $Action -ge 7 && $Action -lt 20 ]];thenmkpasswd -l $Action
elseecho "密码复杂度必须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.用年份除以42.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 ];thenecho "$Action为闰年"exit
else#2.没有被400整除的,先除以4if [ $rn -eq 0 ];then#3.成立,在除以100,有余数则为闰年if [ $rn_2 -ne 0 ];thenecho "$Action为闰年"exitfifi
fiecho "$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 ];thenecho "$Y是闰年"
elseecho "$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是平年

shell脚本—if语句相关推荐

  1. shell 脚本循环语句

    shell脚本循环语句 一.循环语句 1.1 for循环语句 1.2 for循环语法 1.3 for循环案例 1.4 类C风格循环 二.while语法 2.1 语法结构 2.2 while语法使用的一 ...

  2. shell脚本常用语句用法笔记

    脚本基本语句用法笔记 grep -i 查询时不区分大小写 -n打印匹配的行号 -v 打印不匹配的行 -AX包括每次匹配之后X行 -BX包括每次匹配之后X行 cat /etc/passwd |grep ...

  3. linux中脚本循环语句,Shell脚本循环语句

    Shell作为一种脚本编程语言,同样了包含了循环,分支等其他程序控制结构,从而能够轻松完成更加复杂.强大的功能.我们今天就来认识if.for.while.case语句的具体应用. 一.使用if语句结构 ...

  4. shell脚本if语句判断

    if条件判断语句,通常以if开头,fi结尾,也可加入else或者elif进行多条件的判断 如下 : if (表达式) 语句1 else 语句2 fi if语句Shell脚本编程案例如下: #!/bin ...

  5. Shell脚本——条件语句

    shell脚本--编程条件语句(条件测试.if语句.case分支语句) 一.条件测试 1.1 Test命令 1.2 文件测试 1.3整数值比较 1.4字符串比较 1.5逻辑测试 二.if语句 2.1 ...

  6. Shell脚本循环语句及exit、continue和break用法

    目录 一.for循环语句 二.while循环语句结构 三.until 循环语句结构 四.exit.continue和break 一.for循环语句 用法: 读取不同的变量值,用来逐个执行同一组命令 f ...

  7. shell脚本——循环语句

    shell脚本--编程之循环语句(for.while.until) 一.输出字符串或提取Shell变量的值--echo命令 二.for循环语句 三.while循环 while 猜数字小游戏 四.unt ...

  8. shell脚本——if语句

    if语句的结构和使用 在简单的Shell脚本程序中,各条语句将按先后顺序依次执行,从而实现批处理的自动化过程. 然而,单一的顺序结构使得脚本过于机械化,不够"智能",难以处理更加灵 ...

  9. linux sh文件case,Shell脚本case语句简明教程

    Shell case语句为多选择语句.可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: case 值 in 模式1) command1 command2 ...

  10. linux的shell脚本if语句,Shell脚本编程之判断语句

    一.单分支if语句 格式:if 判断条件:then statement1 statement2 ... fi 二.双分支的if语句 格式:if 判断条件; then statement1 statem ...

最新文章

  1. 青龙羊毛——快手极速版(教程)
  2. 《机器学习项目开发实战》送书活动结果公布
  3. PyTorch语义分割开源库semseg
  4. 第一阶段冲刺 第八天
  5. ORACLE数据类型与java数据类型对应
  6. npm下载安装教程_npm下载,安装和使用教程
  7. de4dot反混淆脱壳工具可使用的包
  8. 斯皮尔曼相关系数范围_什么是斯皮尔曼相关系数
  9. 关于Win7企业版激活
  10. c语言中文网qq,c语言写的qq连看辅助
  11. 外文论文阅读生词积累
  12. 穿戴-智能穿戴-ProjectGlass:谷歌眼镜(Google Project Glass)
  13. 计算机硬件选购与市场调查实验报告,计算机组装与维护实训报告范例-20210527010902.docx-原创力文档...
  14. 如何在PDF页面中插入图片?
  15. Python对word文档进行操作
  16. 仿QQ空间登录,解决键盘挡住输入框的问题
  17. 为小米盒子做的两个软件:桌面和浏览器
  18. Python 数组的长度
  19. 分享一个MAC下避开百度网盘限速下载的方法,三步操作永久生效
  20. 广东省揭阳市谷歌卫星地图下载

热门文章

  1. Keil下载代码闪退的问题(已解决)
  2. SQL Server 2012 下载和安装教程
  3. react 学习与使用记录
  4. 优化算法 | 多车型车辆路径问题-初始解构造方法
  5. Proteus8.版本以上中文教程
  6. 贵州学业水平测试信息技术软件,贵州信息技术学业水平考试系统操作手册.doc...
  7. android 项目交接文档,产品交付规范文档
  8. html打开ppt自动播放,PPT怎么自动播放
  9. STM32国产替代,再来一波
  10. eviews建立时间序列模型_模型建立——时间序列 eviews协整检验(EG两步法(Engle-Granger))...