RHCE---流程控制之条件判断

文章目录

  • 目录

    文章目录

    前言

    一.if 语句语法

    双分支结构 

     多分支结构

    案列分析

    总结


前言

命令连接符号中&&以及|| 有各自的判断条件,这是在shell基础中了解到的条件判断,而在脚本编写中,shell脚本有着自己的流程控制之条件判断。


一.if 语句语法

语法1:

# 语法1:
if <条件表达式>
then
    指令
fi

语法 2:

#语法2:
if <条件表达式>;then
    指令
fi

双分支结构 

语法

if <条件表达式>
then
    指令序列1
else
    指令序列2
fi

 多分支结构

if 条件表达式1
then
    指令序列1
elif 条件表达式2
then
    指令序列2
else
    指令序列n
fi

案列分析

案列 1:编写脚本choice1.sh,利用单分支结构实现输入2个 整数,输出最大值

[root@server ~]# vim choice1.sh
#!/bin/bash
read  -p  "请输入第一个整数: " x
read  -p  "请输入第二个整数: " y
max=$x
if (($max

案列 2: 面试题,编写脚本choice2.sh,判断系统内存剩余 容量大小,若低于100M则发送消息进行告警

#!/bin/bash
free_mem=$( free -m | grep Mem | tr -s 
" " | cut -d " " -f4 )
if (($free_mem<100))
then
        echo  "警告,剩余内存:$free_mem ,低于
警戒线100MB"
else
        echo  "剩余内存:$free_mem,空间足够."
fi
# free -m :表示显示内存即虚拟内存的信息,-m以MB单位显示数字
# grep Mem:表示过滤包含Mem所在行
# tr -s " ": 压缩空格为一个
# cut -d " " -f4 :以空格为间隔符,取其第4部分

案列 3: 编写脚本choice3.sh,判断当前脚本的执行者,若 不是root账户则提示,并退出

# 检查当前账户的4种方法
[root@server ~]# whoami
root
[root@server ~]# id -u
[root@server ~]# echo $USER
root
[root@server ~]# echo $UID
[root@server ~]# vim choice3.sh
#!/bin/bash
if [ "$USER" != "root" ]
then    
        echo  "please switch user root"
fi      
[root@server ~]# bash choice3.sh   # root账户下执行
[root@server ~]# pwd
/root
[root@server ~]# mv choice3.sh / # 让普通账户能访问脚本,需要移动到/
[root@server ~]# chmod +x /choice3.sh # 赋予执行权限
[root@server ~]# ll /choice3.sh 
-rwxr-xr-x 1 root root 81  6月 18 10:10 /choice3.sh
[root@server ~]# tail -1 /etc/passwd   # 查看普通账户名
fox:x:1000:1000::/home/fox:/bin/bash
[root@server ~]# su fox           #切换账户
[fox@server root]$ cd /
[fox@server /]$ bash choice3.sh    
please switch user root

 案列 4:编写脚本choice4.sh,实现闰年的判断

[root@server ~]# vim choice4.sh
#!/bin/bash
read -p "请输入4位数整数年份: " year 
if [ -n "$year" ]                    # 非空测试
then
        if ((year%4==0)) && ((year%100!=0)) 
|| ((year%400==0))
        then
                echo  "闰年"
        else
                echo  "平年"
        fi
else
        echo  "请输入有效4位整数年份"
fi

案例 5:编写脚本choice5.sh,判断sshd是否运行

# 分析
# 根据进程数判断
[root@server ~]# ps -ef | grep sshd | grep -v grep | wc -l
# 根据端口号判断
[root@server ~]# netstat -lntup | grep 22 | wc -l
[root@server ~]# vim choice5.sh
#!/bin/bash
num=$(ps -ef | grep sshd | grep -v grep | 
wc -l)
if (($num>0))
then
        echo  "sshd is running"
else
        echo  "sshd is not running"
fi

案列 6:面试题,编写脚本choice6.sh,判断主机是否存活 

[root@server ~]# vim choice6.sh
#!/bin/bash
read -p "请输入测试主机的IP地址:" ip
ping  -c 2 -w 3 $ip &> /dev/null
# -c 2 表示发送2个数据包,-w 3 表示等待3秒结束,注
意:不能等待1秒结束,有可能第二个数据包没有ping完就
结束了,会返回错误的状态码
if [ $? -eq 0 ]
then
        echo  "主机$ip 已运行"
else
        echo  "主机$ip 未运行"
fi
# 上例修改,使用循环测试多台主机是否存活,设置显示颜
色
[root@server ~]# vim choice6.sh
#!/bin/bash
for ip in 192.168.48.{125..135}
do
        ping  -c 2 -w 3 $ip &> /dev/null
        if [ $? -eq 0 ]
        then

                echo -e  "\e[1;31m!!主机 $ip 
已运行!!\e[0m"  # 高亮、红色
        else
                echo  "主机$ip 未运行"
        fi
done

 案列 7 :编写脚本choice7.sh,输入百分制成绩,判断等级

[root@server ~]# vim choice7.sh
#!/bin/bash
read -p "请输入百分制成绩: " score
if [ -z $score ]
then
        echo  "未输入,请重新输入"
elif   [ $score -lt 0 -o $score -gt 100 ]
then
        echo  "成绩输入有误,请输入0-100间数字"
elif [ $score -ge 90 ]
then
        echo  "成绩优秀"
elif   [ $score -ge 80 ]
then
        echo  "成绩良好"
elif   [ $score -ge 60 ]
then
        echo  "成绩及格"
else
        echo  "补考"
fi

案列 8:编写脚本,根据用户输入的内容,判断是数字、字 母、其它字符

[root@server ~]# vim choice8.sh
#!/bin/bash
read -p  "请输入数字、字母、符号: " str
if  echo  $str | grep [a-zA-Z] > /dev/null
then
        echo  "字母"
elif   echo  $str | grep [0-9] > /dev/null
then
        echo  "数字"
else
        echo  "符号"
fi

 案列 9:编写脚本choice9.sh,判断当前主机cpu生产商

[root@server ~]# vim choice9.sh
#!/bin/bash
vendor=$(grep "vendor_id" /proc/cpuinfo | 
uniq | cut -d " " -f2)
if [ $vendor == GenuineIntel ]
then    
        echo  "Intel"
elif [ $vendor == AuthenticAMD ]
then    
        echo  "AMD"
else    
        echo   "other"
fi
  •  case语句会将该变量的值与 )括号中的值相比较,如果与 某个值相等,则执行对应语句。 当遇到“;;”符号时,就跳出case语句,执行esac语句后面 的语句。 如果没有与任何一个值相匹配,则执行*)后面的一组语句

案例 10:编写脚本choice10.sh,对上例7的百分制成绩判断 等级成绩进行改写

[root@server ~]# vim choice10.sh
#!/bin/bash
read -p "请输入百分制成绩: " score
case $score in
9[0-9]|100)
                echo "成绩优秀"
       ;;
        8[0-9])
                echo  "成绩良好"
       ;;
        6[0-9]|7[0-9])
                echo  "成绩及格"
       ;;
       *)
                echo  "补考"
esac

 


总结

你可能感兴趣的:(RHCE,linux)