首页 > 技术文章 > shell 脚本练习 之 if ,case 语句

zhijiyiyu 2021-07-19 11:21 原文

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 验证

image-20210719085805148



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验证

image-20210719093032019



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

image-20210719095642316



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

image-20210719102911203



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

image-20210719111819644



推荐阅读