Shell编程之条件语句——if语句case语句
Posted 可乐卷儿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell编程之条件语句——if语句case语句相关的知识,希望对你有一定的参考价值。
一、if语句
通过我上一篇文章条件测试操作,实际上使用“&&”和“||”逻辑测试已经可以完成简单的判断并执行相应的操作,但是当需要选择执行的命令语句家偶偶是,这种方式将使执行代码显得很复杂,不好理解。而使用专门的if条件语句,可以更好的整理脚本结构,使得层次分明,清晰易懂
1、单分支的if语句
固定结构
if 条件测试操作
then 命令序列
fi
或者
if 条件测试操作;then
命令序列
fi
注意点
- if和fi是必须成对出现,表示开始和结束
- then如果连接if语句,需要“;”
实例
挂载到mnt目录下,并把过程扔进垃圾箱
或者then可以和if写在一行,中间加上分号
2、双分支的if语句
在单分支的基础上针对“条件不成立”的情况下执行另一种操作,使用else
固定结构
if 条件测试操作
then 命令序列
else
fi
实例
判断以.sh结尾的脚本是一个shell脚本
read -p "请输入文件名: " file
if [[ $file == *.sh ]];then
echo "它是一个shell脚本"
else
echo "它不是一个shell脚本"
fi
3、多分支的if语句
固定结构
if 条件测试1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi
实例
判断成绩,85-100是优秀,70-85是良好,60-70及格,60以下不及格
#!/bin/bash
read -p "请输入分数:" s
if [ $s -lt 0 -o $s -gt 100 ];then
echo "超出范围无法判定"
elif [ $s -ge 85 -a $s -le 100 ];then
echo "优秀"
elif [ $s -ge 70 -a $s -lt 85 ];then
echo "良好"
elif [ $s -ge 60 -a $s -lt 70 ];then
echo "及格"
else
echo “不及格”
fi
验证
[ abc == abc ] ##在一个方括号"[ ]“内,双等号“==”是精确匹配
[[ abc == abc* ]] ##双括号可以使用&&和||做逻辑判断;可以搭配通配符来判断
实例
判断系统用户是否有家目录,若无家目录就删除用户
read -p "请输入用户名:" user
if grep $user /etc/passwd &> /dev/null;then
if [ -d /home/$user ];then
echo "该用户状态正常"
else
read -p "该用户没有家目录,是否删除该用户,请输入[yes/no]:" s
if [ $s == yes ];then
echo "正在删除用户..."
userdel $user &> /dev/null;sleep 2
echo "该用户已删除"
elif [ $s == no ];then
exit
fi
fi
fi
验证
4、练习题
- 判断目标主机是否存活,存活就打印is up,如果不存活就打印is down
vim ip.sh
#!/bin/bash
read -p "请输入ip:" ip
ping -c 3 $ip &> /dev/null
if [ $? -eq 0 ];then
echo "$ip is up"
else
echo "$ip is down"
fi
验证
- 判断当前登陆用户是否是管理员
vim user3.sh
#!/bin/bash
#判断当前登录用户是否是管理员
#!/bin/bash
read -p "请输入用户名:" user
id $user &> /dev/null
if [ $? -eq 0 ]
then
echo "是管理员"
else
echo "不是管理员"
fi
验证
- 判断输入的用户名是否存在,存在提示已存在,不存在则创建用户并设置密码
vim user2.sh
#!/bin/bash
read -p "请输入用户名:" user
cat /etc/passwd | grep -q $user
if [ $? -eq 0 ]
then
echo "用户已存在"
else
read -p "请创建新的用户名:" user
read -p "请输入密码:" pass
useradd $user
echo "$pass" | passwd --stdin $user
fi
验证
- 剪刀石头布人机对战
vim r.sh
echo -e "\\e[35m人机对战开始\\e[0m"
read -p "剪刀:0 石头:1 步:2 请出拳(选择数字0-2): " num
com=`expr $RANDOM % 3`
case $num in
[0])
if [ $com -eq 0 ];then
echo "平局"
elif [ $com -eq 2 ];then
echo "你输了"
elif [ $com -eq 1 ];then
echo "你赢了"
fi
;;
[1])
if [ $com -eq 0 ];then
echo "你赢了"
elif [ $com -eq 2 ];then
echo "平局"
elif [ $com -eq 1 ];then
echo "你输了"
fi
;;
[2])
if [ $com -eq 0 ];then
echo "你输了"
elif [ $com -eq 2 ];then
echo "你赢了"
elif [ $com -eq 1 ];then
echo "平局"
fi
;;
esac
验证
二、case语句
1、语句结构
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
...
*)
默认命令序列
esac
使用case分支语句时,有以下注意点
- case行尾必须为单词“in”,每一模式必须以右括号“)”结束
- 双分号“;;”表示命令序列的结束
- 模式字符串中,可以用方括号报送一个联系的范围,如[0-9];还可以用竖杠符号“|”表示或,如“A|B”
- 最后的“)”表示默认模式,其中的相当于通配符
2、实例
- 判断一个字符是大小写字母、数字、还是特殊字符
vim zi.sh
#!/bin/bash
read -p "请输入一个字符:" a
case $a in
[a-z])
echo "小写字母";;
[A-Z])
echo "大写字母";;
[0-9])
echo "数字";;
*)
echo "特殊字符";;
esac
验证
验证时发现错误,字符集的问题导致系统无法区分大小写,把系统的变量LANG改成C语言
export LC_ALL=C
再次验证正确
- 输入一个月份,判断是一年中的第几季度
vim yue.sh
#!/bin/bash
read -p "请输入月份[数字1-12]:" m
case $m in
[1-3])
echo "第一季度";;
[4-6])
echo "第二季度";;
[7-9])
echo "第三季度";;
[10-12])
echo "第四季度";;
*)
echo "输入错误";;
esac
验证
以上是关于Shell编程之条件语句——if语句case语句的主要内容,如果未能解决你的问题,请参考以下文章