day57-shell-shell-if

day57-shell

1.什么是if

if就是模仿人类的判断来进行的,但它没有人类那么有情感,只有True和False这两种结果。

2.为什么要使用if

当我们在写程序的时候,经常需要对上-步的执行结果进行判断。那么就需要使用f.

if语句在我们程序中就是用来做判断的,以后大家不管学习什么语言,以后只要涉及到判断的部

分,大家就可以直接拿f来使用,不同的语言之间的if只是语法不同,原理是相同的。

3.if基础语法

  • 单条件
if [ $1 -eq $2 ];then
echo "ok"
fi
  • 双条件
if [ $1 -eq $2 ];then
   echo "OK!"
else
   echo "error!"
fi
  • 多条件
image.png

案例一:根据用户输入的用户名称进行以下判断:

  1. 根据输入的用户判断系统中是否存在当前用户

  2. 如果不存在再次判断是否存在家目录

  3. 如果没有则提示该用户不存在

[root@manager-61 ~/if-test]#cat if01.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if01.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
read -p "请输入用户名: " Na
if  grep ${Na} /etc/passwd;then
 echo "当前用户已存在"
elif  ls -ld /home/${Na};then
 echo "当前用户存在一个家目录: ${Na}"
else
 echo "不存在"
fi
----------------------------------------------------------------
[root@manager-61 ~/if-test]#cat if01.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if01.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
#read -p "请输入用户名: " Na
#if  grep ${Na} /etc/passwd;then
#echo "当前用户已存在"
#elif  ls -ld /home/${Na};then
#echo "当前用户存在一个家目录: ${Na}"
#else
#echo "不存在"
#fi
grep_user=$(grep $1 /etc/passwd &>/dev/null)
grep_rc=$?
cat_home=$(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@manager-61 ~/if-test]#cat if02.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if02.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
if [ $1 -eq $2 ];then
    echo "$1=$2"
elif [ $1 -gt $2 ];then
    echo "$1>$2"
else
    echo "$1<$2"
fi
-----------------------------------------------------------------------
[root@manager-61 ~/if-test]#cat if02.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if02.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
#if [ $1 -eq $2 ];then
#echo "$1=$2"
#elif [ $1 -gt $2 ];then
#echo "$1>$2"
#else
#echo "$1<$2"
#fi
if [ $1 -eq $2 ];then
   echo "$1 = $2"
else
   if [ $1 -gt $2 ];then
      echo "$1 > $2"
   else
      echo "$1 < $2"
   fi

fi

4.基于文件的判断

#基于文件的判断的两种书写方式
[root@manager-61 ~/if-test]#cat if03.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if03.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
read -p "请输入需要备份的文件或目录: " Src
read -p "请输入备份的目标位置: " Dest
[ -d ${Dest} ] || mkdir -p ${Dest}
cp -a ${Src} ${Dest}
#if [ ! -d ${Dest} ];then
#mkdir -p ${Dest}
#fi

案例一:备份数据库mysql,通过传参的方式输入你需要备份的库名称,备份到/backup/mysql/时间/xx.sql

#1.数据库手动备份
#mysqldump -uroot -poldxu.com -B mysql > /backup/mysql/2019-10-29/mysql.sql
#2.脚本实现数据库备份
[root@manager-61 ~/if-test]#cat if04.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if04.sh
#URL: https://www.leitiancheng.cn
#Description: 交互式备份数据库
#*********************
#1.变量定义
Dest=$(date +%F)
Path=/backup/mysql/${Dest}
#2.判断是否存在备份目标位置,不存在则创建
[ -d ${Path} ] || mkdir -p ${Path}
#3.执行备份数据库的命令
mysqldump -uroot -poldxu.com -B mysql >$Path/mysql.sql

案例二:备份数据库mysql,通过交互式输入你需要备份的库名称,备份到/backup/mysql/时间/xx.sql

[root@manager-61 ~/if-test]#cat if05.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if04.sh
#URL: https://www.leitiancheng.cn
#Description: 交互式备份数据库
#*********************
#1.变量定义
Dest=$(date +%F)
Path=/backup/mysql/${Dest}
#2.判断是否存在备份目标位置,不存在则创建
[ -d ${Path} ] || mkdir -p ${Path}
#3.展示数据库中的信息
mysql -uroot -poldxu.com -e "show databases;"
read -p "请输入需要备份的库名: " dbname
#4.执行备份数据库的命令
mysqldump -uroot -poldxu.com -B ${dbname} >$Path/${dbname}.sql

5.基于整数进行判断

案例一:用户执行脚本,检查nginx状态.仅支持传递一个参数

[root@manager-61 ~/if-test]#cat if06.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if06.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
if [ $#  -ne 1 ];then
    echo "请输入一个参数"
exit
fi
systemctl status ${Server} >/dev/null
if [ $? -eq 0 ];then
    echo "${Server} 已启动"
else
    echo "${Server} 未启动"
fi


案例二:查看磁盘/当前的使用状态,如果使用率超过80%,则报警发邮件

[root@manager-61 ~/if-test]#cat if07.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if07.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
Disk_use=$(df -h|awk '/\/$/ {print $(NF-1)}')
if [ ${Disk_use%\%} -ge 5 ];then
    echo "邮件报警中..."
sleep 3
    echo "邮件已发送,当前磁盘使用率为: ${Disk_use}"
fi

案例三:判断当前用户是不是root,如果不是name返回"ERROR"----单分支

[root@manager-61 ~/if-test]#cat if08.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if08.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
if [ $UID -ne 0 ];then
    echo "ERROR..."
fi


案例四:判断当前用户是不是root,如果是root输出hello admin!.如果不是输出hello guest!----双分支

[root@manager-61 ~/if-test]#cat if09.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if08.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
if [ $UID -eq 0 ];then
    echo "hello admin!"
else
    echo "hello guest!"
fi

6.基于字符进行判断

案例一:判断当前用户是不是root,如果不是name返回"ERROR"----单分支

[root@manager-61 ~/if-test]#cat if08.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if08.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
if [ $USER != "root" ];then
    echo "ERROR..."
fi

案例二:判断当前用户是不是root,如果是root输出hello admin!.如果不是输出hello guest!

[root@manager-61 ~/if-test]#cat if09.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if08.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
if [ $USER = 0 ];then
    echo "hello admin!"
else
    echo "hello guest!"
fi

案例三:备份filename文件至/backup/system/filename-2019-10-29,如果该目录不存在则自动窗户建

[root@manager-61 ~/if-test]#cat if10.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if10.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
Date=$(date +%F)
Dest=/backup/system/
#3.输入要备份的文件
read -p  "请输入要备份的文件: " File
#2.判断是否存在该目录
[ -d ${Dest} ] || mkdir -p ${Dest}
#3.拷贝文件
cp -a ${File} ${Dest}/file-${Date}

------------------------------------------------------------------
[root@manager-61 ~/if-test]#cat if10.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if10.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
Date=$(date +%F)
Dest=/backup/system/
#3.输入要备份的文件
read -p  "请输入要备份的文件: " File
#2.判断是否存在该目录
#[ -d ${Dest}/ ] || mkdir -p ${Dest}}
if [ ! -f ${Dest} ];then
    mkdir -p ${Dest}   
fi
#3.拷贝文件
cp -a ${File} ${Dest}/file-${Date}


案例四:继需求3,判断备份的文件是否存在,如果不存在则提示”No such file or directory“,然后退出。

[root@manager-61 ~/if-test]#cat if11.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if10.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
Date=$(date +%F)
Dest=/backup/system/
#1.输入要备份的文件
read -p  "请输入要备份的文件: " File
#2.判断备份的文件是否存在
if [ ! -f ${File} ];then
echo "$File No such File or Directory"
exit
fi
#2.判断是否存在该目录
[ -d ${Dest} ] || mkdir -p ${Dest}
#3.拷贝文件
cp -a ${File} ${Dest}/file-${Date}

案例五:继续求1,2,判断个备份的文件是否为空,如果为空则提示"This is file empty",然后退出

[root@manager-61 ~/if-test]#cat if12.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if10.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
Date=$(date +%F)
Dest=/backup/system/
#1.输入要备份的文件
read -p  "请输入要备份的文件: " File
#2.判断备份的文件是否存在
if [ ! -f ${File} ];then
    echo "$File No such File or Directory"
exit
fi
if [ ! -s ${File} ];then
    echo "The file is empty!"
exit
fi
#2.判断是否存在该目录
[ -d ${Dest}/file-${Date} ] || mkdir -p ${Dest}/file-${Date}
#3.拷贝文件
cp -a ${File} ${Dest}/file-${Date}
----------------------------------------------------------------
[root@manager-61 ~/if-test]#cat if13.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if10.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
Date=$(date +%F)
Dest=/backup/system/
#1.输入要备份的文件
read -p  "请输入要备份的文件: " File
#2.判断备份的文件是否存在
if [ -f ${File} ];then
    if [ ! -s ${File} ];then
    echo "空文件!"
    exit
    fi
elif [ ! -f ${File} ];then
echo "没有这个文件!"
exit
fi
#3.判断是否存在该目录
[ -d ${Dest}/file-${Date} ] || mkdir -p ${Dest}/file-${Date}
#4.拷贝文件
cp -a ${File} ${Dest}/file-${Date}


7.基于正则进行判断

案例一: 使用for循环打印一堆单词,然后仅输出以r开头的单词

[root@manager-61 ~/if-test]#cat if15.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if15.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
for var in ab ac rx bx rvv vt
do
    if [[ "$var" =~ ^r ]];then
       echo ${var}
    fi
done

案例二:编写一个脚本创建用户

  1. 提示用户输入的要创建的用户名必须是以英文字母开头的

  2. 提示用户输入的要创建的用户名必须是以数字结尾的

  3. 如果都没有问题就进行创建

[root@manager-61 ~/if-test]#cat if15.sh
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if15.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
for var in ab ac rx bx rvv vt
do
    if [[ "$var" =~ ^r ]];then
       echo ${var}
    fi
done
[root@manager-61 ~/if-test]#cat if16.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if16.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
read -p "请输入想要创建的用户名: " Username
if [[ ! "$Username" =~ ^[a-z]+ ]];then
   echo "请输入以字母开头的!!!"
elif [[ ! "$Username" =~ [0-9]+$ ]];then
     echo "请输入以数字结尾的!!!!"
     exit
     fi
id ${Username} &>/dev/null
if [ $? -eq 0 ];then
   echo "用户已存在"
   exit
   fi

useradd ${Username} &>/dev/null
----------------------------------------------------------------
[root@manager if]# cat if-18.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-29
# FileName:   if-18.sh
# URL:         https://www.xuliangwei.com
# Description: 

read -p "请输入用户的前缀: " qz
#判断用户输入的前缀
if [[ ! $qz =~ ^[a-Z]+$ ]];then
    echo "你输入的不是纯英文....."
    exit 1
fi


read -p "请输入用户的后缀: " hz
#判断用户输入的后缀
if [[ ! $hz =~ ^[0-9]+$ ]];then
    echo "你输入的不是纯数字...."
    exit 2
fi

#开始拼接用户输入的前缀+后缀=user_name变量
    user_name=$qz$hz
    id $user_name &>/dev/null
    if [ $? -eq 0 ];then
        echo " $user_name 用户已存在"
        exit 3
    else
        useradd $user_name
        echo "$user_name 用户创建成功"
    fi

8.基于逻辑或 && || -a -o

示例:

[root@manager if]# cat if-15.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-29
# FileName:   if-15.sh
# URL:         https://www.xuliangwei.com
# Description: 


read -p "请输入一个数字: " num

#判断用户输入的是否为空
if [ -z $num ];then
    echo "请不要输入空值"
    exit
fi
echo "你输入的数字是: $num"



1.两个条件必须都满足
[root@manager if]# [ 1 -lt 2 -a 5 -gt 10 ];echo $?

2.只要满足一个条件即可
[root@manager if]# [ 1 -lt 2 -o 5 -gt 10 ];echo $?

3.两个条件必须都满足
[root@manager if]# [ 1 -lt 2 ] && [ 5 -gt 10 ] ; echo $?

4.只要满足一个条件即可
[root@manager if]# [ 1 -lt 2 ] || [ 5 -gt 10 ] ; echo $?

案例一:提示学生输入考试成绩.

  1. 如果分数大于0小于59提示补考

  2. 如果分数大于60小于70提示良好

  3. 如果分数大于71小于85提示好

  4. 如果分数大于86小于100提示优秀

  5. 不允许输入空值

  6. 必须输入的是数字

[root@manager-61 ~/if-test]#cat if14.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-29
#FileName: if14.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
read -p "请输入成绩: " cj
if [ -z ${cj} ];then
   echo "请输入成绩!"
   exit
fi
if [[ ! $cj =~ ^[0-9]+$ ]];then
   echo "请输入纯数字!"
   exit
fi
if [ ${cj} -ge 0 -a $cj -le 59 ];then
   echo "补考!!!!"
   fi
if [ ${cj} -ge 60 -a $cj -le 70 ];then
   echo "良好!!!!"
fi
if [ ${cj} -ge 71 -a $cj -le 85 ];then
   echo "好!!!!!!"
fi
if [ ${cj} -ge 86 -a $cj -le 100 ];then
   echo "秀啊!!!!!"
fi
if [ ${cj} -gt 100 ];then
   echo "请输入小于100的数字!!!"
fi

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容