shell 脚本练习 之 if ,case 语句
shell 脚本练习之 if ,case 语句
1 检查用户家目录中的 test.sh 文件是否存在,并检查是否有执行权限
复制#!/bin/bash
FILE=$HOME/test.sh #将家目录中的test.sh 作为值 赋给变量 FILE
#先使用第一个if 语句,判断文件是否存在
if [ -f $FILE ];then #文件存在为真
#再使用第二个 if 语句,文件是否有执行权限
if [ -x $FILE ];then #文件有执行权限为真
echo "$FILE 存在,且有执行权限"
else
echo "$FILE 存在,但是没有执行权限"
fi
else
echo "$FILE 不存在"
fi
1.2 验证
2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误 (成绩只考虑 0以上的整数)
复制#!/bin/bash
#将用户键盘输入 作变量 score 的值
read -p "请输入您100米 赛跑成绩: " score
#第一个if 判断 用户是否进入选拔赛(即,输入的数字是0-10 之间)
if [ $score -gt 0 ] && [ $score -le 10 ] ;then #用户输入的在0-10 之间
echo "成功进入选拔赛"
read -p "请输入您的性别(男:M , 女:W):" sex #进一步让用户数性别,作为
变量sex 的值
#判断用户输入的是否是 W/M
if [ "$sex" == "M" ];then #如果用户输入的是M ,则进入男生组
echo "您进入了男生组"
elif [ "$sex" == "W" ];then #用户输入W ,则进入女生组
echo "您进入了女生组"
else #如果既不是M ,也不是W,则告诉他输入有误
echo "请正确输入,输入M 或W "
fi
elif [ $score -gt 10 ];then #如果用户输入第一次输入的数字大于10,则告诉他
别淘汰了
echo "您被淘汰了"
2.2验证
3.用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录
复制#!/bin/bash
#将用户的输入 作为值 赋给 变量 FILE
read -p "请输入要解压的tar 包:" FILE
#判断用户输入的文件是否存在
if [ -f "$FILE" ];then #文件存在为真
case "$FILE" in
*.tar.gz) #如果用户输入的文件名,以 .tar.gz结尾,则执行以下命令
echo "开始解压gz 格式tar 包"
tar -zxf "$FILE" -C /opt &> /dev/null
echo "解压完成"
;; #双分号结尾
*.tar.bz2) #如果用户输入的文件名,以.tar.bz2结尾,则执行以下命令
echo "开始解压bz2 格式tar 包"
tar -jxf "$FILE" -C /opt &> /dev/null
echo "解压完成"
;;
*) #如果用户输入的文件名,既不是.tar.gz结尾,也不是.tar.bz2结尾>,则告诉他,输入正确的tar 包名
echo "请输入正确的 tar 包名"
esac
else #如果上面if 语句判断结果为 假(即文件不存在),则告知用户文件不存
在
echo "文件不存在"
fi
4.提示用户输入内容,使用if 语句判断输入的内容是否为整数。然后在判断是奇数还是偶数。(0是偶数)
4.1 方法一
复制#!/bin/bash
#将用户的输入作为变量 NUMBER的值
read -p "请输入一个整数:" NUMBER
NUM=$(echo "$NUMBER % 1 " | bc ) #将用户输入的数字(必须是数字)用bc 计算 1 取余的结果,赋值给变量 NUM。 如果取余结果是0,则为整数,不是0,则不是整数。
if [ "$NUM" == "0" ];then #判断取余结果是否和0 一样. 一样则为真
echo "您输入的是一个整数"
Result=$[$NUMBER%2] #在将输入的数字和2 做取余。结果赋值给变量Result
# 2取余结果,如果是0,则该数是偶数,否则,>该数为
奇数 if [ "$Result" -eq 0 ];then # 如果取余结果等于 0 ,则为真,“输出这个数>为偶数
echo "这个数是偶数"
else #否则就输出“这个数是奇数”
echo "这个数是奇数"
fi
else #如果第一次if判断, 变量NUM 不和0 想等则,该数不是整数
echo "您输入的不是一个整数"
fi
4.2 方法二
复制#!/bin/bash
# 将用户输入的内容作为值赋给NUM
read -p "请输入内容:" NUM
#因为 expr 运算,如果运算结果是0,则返回值为>非0值。所以将 用户输入0 的情况单独拿出判断(expr 0 + 0 ,返回值非零)
if [ "$NUM" == "0" ] ;then #这里要做字符比较,防止用户输入的是非数字情况
echo "您输入的数字是0,它是偶数"
exit #exit ,退出脚本
fi
# 将输入的内容 +0 ,做加法运算。
expr $NUM + 0 &> /dev/null
#shell 里只能整数运算。如果是输入的内容不是整数,则会报错,返回值为非零值
if [ $? -eq 0 ];then #判断加法运算的返回值,如果是0,则为真,代表运算成功,输入的内容是整数
echo " 您输入的是整数"
if [ $[$NUM%2] -eq 0 ] ;then #将输入的结果和 2 做取余运算,如果是0,则表示该>数为偶数
echo "该数字是一个偶数"
else #否则,该数就是奇数
echo "该数字是一个奇数"
fi
else #如果“expr $NUM + 0 ” 的返回值不是 0,表示输入的内容不是整数
echo "您输入的不是整数"
fi
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现