“Linux Shell编程”实验报告

实验四 Shell脚本中的分支结构

(一)if分支结构

  • if结构是最基本的分支结构类型。
  • 使用if结构时,只有满足某个条件才会执行某些语句,而在不满足此条件的情况下执行其他语句。

1.

if -then结构 - if -then语句的基本格式如下: if [ 条件判断式 ];then 程序 fi 或者: if [ 条件判断式 ] then 程序 fi - 注意事项: * Shell中的if语句使用fi结尾,不同于一般语句的大括号结尾; * [ 条件判断式 ]就是使用test命令判断,所以[]和条件判断式之间必须有空格; * then后面跟符合条件执行的程序,可以放在[]之后,用;分割,也可以换行写入,不需要;分割。 例一:

#if -then结构使用

#!/bin/bash

echo 判断3是否小于5
if [ 3 -le 5 ]
then
    echo 3小于5
fi
echo

echo 判断5是否小于3
if [ 5 -le 3 ]
then
    echo 5小于3
fi
copy

赋予可执行权限后执行脚本,结果如下: 图片描述

例二:

test=$(env | grep "USER" | cut -d "=" -f2)
echo $test

if [ "$test" == ybcarry ] 
then
    echo "Current user is root."
fi
copy

赋予可执行权限后执行脚本,结果如下:

图片描述

例三: 查看自己系统根分区的分区号:

rate=$(df -h | grep "/dev/sda1" | awk '{print $5}' | cut -d "%" -f1)
echo $rate

if [ $rate -ge 80 ]
then
    echo "Warning! /dev/sda1 is full!!!"
fi
copy

赋予可执行权限后执行脚本,结果如下:

图片描述

2.

if -then -else结构 - if -then -else语句的基本格式如下: if [ 条件判断式 ] then 条件成立时,执行的程序 else 条件不成立时,执行的程序 fi

例四:

echo 判断3是否小于5
if [ 3 -le 5 ]
then
    echo 3小于5
else
    echo 3大于5
fi
echo

echo 判断5是否小于3
if [ 5 -le 3 ]
then
    echo 5小于3
else
    echo 5大于3
fi
copy

赋予可执行权限后执行脚本,结果如下:

图片描述

(二)嵌套结构

  • 嵌套结构是指在某个结构中还存在该结构,从而形成该结构的嵌套使用。
  • if -then结构的嵌套基本形式如下:
    if [ 条件判断式1 ]
    then
    if [ 条件判断式2 ]
    then
        程序1
    fi
        程序2
    fi
    
    copy

例一:

echo 判断3和5的关系
if [ 3 -le 5 ]
then
    if [ 3 -eq 5 ]          
    then
        echo 3等于5
    fi

    if [ 3 -ge 5 ]         
    then
        echo 3大于5
    fi
echo 3小于5
fi
copy

赋予可执行权限后执行脚本,结果如下:

图片描述

  • if -elif - else结构的嵌套基本形式如下:
    if [ 条件判断式1 ]
    then
        程序1 
    elif [ 条件判断式2 ]
    then
        程序2
    else
        程序3
    fi
    
    copy

例二:

#if -elif - else嵌套结构使用

#!/bin/bash

echo 判断35的关系
if [ 3 -le 5 ]
then
    echo 3小于5
elif [ 3 -eq 5 ]
then
    echo 3等于5
else
    echo 3大于5
fi
copy

赋予可执行权限后执行脚本,结果如下:

图片描述

例三:

  • 下面用所学内容来写一个简易计算器:

  • 设计思路:

                 a.有没有输入内容
                 b.判断输入的是否为数字
                 c.判断输入的运算符
                 d.执行运算操作
    
    copy
  • 先自己思考,参考代码如下:

#字符界面加减乘除计算器

#!/bin/bash

#通过read命令接收要计算的数值,赋予变量num1和num2
read -t 30 -p "Please input num1: " num1
read -t 30 -p "Please input num2: " num2

#通过read命令接收运算符,赋予变量op
read -t 30 -p "Please input operator: " op

#判断num1、num2和op不为空
if [ -n "$num1" -a -n "$num2" -a -n "$op" ]
then
      #定义test1和test2,把test1的值置为空,如果替换成功,证明num1为数值,test2也如此
      test1=$(echo $nm1 | sed 's/[0-9]//g')
      test2=$(echo $nm2 | sed 's/[0-9]//g')

      #判断num1和num2是否为数值
      if [ -z "$test1" -a -z "$test2" ]
      then
          #判断运算符
          #加法运算
          if [ "$op" == '+' ]
          then 
              result=$(($num1 + $num2))
          #减法运算
          elif [ "$op" == '-' ]
          then 
              result=$(($num1 - $num2))
          #乘法运算
          elif [ "$op" == '*' ]
          then 
              result=$(($num1 * $num2))
          #除法运算
          elif [ "$op" == '/' ]
          then 
              result=$(($num1 / $num2))
          else#不匹配,输出提示,退出程序,返回错误代码10
              echo "Please input a valid symbol !"
              exit 10
          fi
      else#test1和test2不是数值,输出提示,退出程序,返回错误代码11
          echo "Please input a valid value !"
          exit 11
      fi
else  #test1和test2为空,输出提示,退出程序,返回错误代码12
    echo "Please input a value !"
    exit 12
fi
#输出结果
echo "$num1 $op $num2 = $result"
copy

赋予可执行权限后执行脚本,结果如下:

图片描述

(三)case多条件分支结构

  • if多分支条件语句与case多条件分支条件语句的区别:case语句只能判断一种条件关系,if语句可以判断多种条件关系。
  • case结构基本格式如下:
case 变量 in
值1)
    程序1;;2)
    程序2;;

    ...省略其他分支...

*)
    程序3;;
esac
copy

例一:

#case结构的使用

#!/bin/bash

echo -n 输入一个正整数:
read num

case $num in
1)echo 输入的数值为1;;
2)echo 输入的数值为2;;
3)echo 输入的数值为3;;
4)echo 输入的数值为4;;
5)echo 输入的数值为5;;
*)echo 输入的数值大于5;;
esac

echo 结束
copy

赋予可执行权限后执行脚本,结果如下:

图片描述

(四)select命令的使用

  • case多条件分支条件语句与select命令的区别:case结构需要提前输入用户的操作方式然后匹配操作,select命令可以自动获取用户输入并自动根据用户的输入进行处理。
  • select命令基本格式如下:
select 变量 in 变量列表
do
      命令
done
copy

例一:

#select命令的使用

#!/bin/bash

select choose in C C++ C# Java Python Swift Shell Other
do
break
done
echo 你喜欢的是 $choose
copy

赋予可执行权限后执行脚本,结果如下:

图片描述

  select命令可以循环获取用户的输入,但是在第二次以后就不再显示菜单,因此一般不用select的循环特性。
copy
最新评论
暂无评论~