多条件判断语句

  • 简介

shel除了通过 if elif来处理多分支的情况外,还可以通过case语句来处理多分支,使用case语句可以使程序更加的有条理性

  • case的基本语法

Shell 从入门到精通系列 (第三章 条件判断语句下篇)_容器运维

语法分析:

variable 是一个变量,case语句会将该变量的值与value1~valuen中的每个值相比较,如果与某个值相等,则执行该value所对应的一组语句。当遇到“;;”时候就跳出case语句,

执行esac语句后面的语句。如果没有任何一个值与variable的值相匹配,则执行*后面的一组语句


特别注意:

1.变量名variable,可以使用双引号,也可以不使用

2.每个case子句中的条件测试部分,都以 ")"号结束

3.每个case子句都以一对“;;”号结束,当遇到一对分号时,会跳过当前case子句后面的所有case子句,包括*所对应的子句,执行esac子句后面的其他语句

4.case语句结构以esac结尾,这与if相似


  • 案例1(利用case语句处理选项参数)

管理java服务的一个脚本

case "$1" in

 start)

     echo "starting java"

     java -jar springboot.jar

     ;;

 stop)

     echo "stoping java"

     java_pid=`ps -ef|grep springboot.jar|grep -v grep|awk '{print $2}'`

     kill -15 java_pid

     ;;

 restart)

     $0 stop

     $0 start

     ;;

 *)

   echo "Usage: $0 {start|stop|restart}"

   exit 1

esac

分析: 第一行通过系统变量$1接收用户输入的参数,参数可以接收3个值,start|stop|restart,执行*对应的子句,则提示用户使用方法

  • 案例2(利用case语句处理用户输入)

#!/bin/bash

#输出提示信息

echo "hit a key,then hit return"

#读取用户按下的键

read keypress

#case 语句开始


case "$keypress" in

 #小写字母

 [[:lower:]])

   echo "Lowercse letter."

   ;;

 #大写字母

 [[:upper:]])

   echo "Uppercase letter."

   ;;

 #单个数字

 [0-9])

   echo "Digit"

   ;;

 #其他字符

 *)

   echo "other letter."

   ;;

esac

结果:

Shell 从入门到精通系列 (第三章 条件判断语句下篇)_运算符_02


运算符

  • 算术运算符

算术运算符分类:

运算符

说明

举例

+

求两个数的和

例如 1+5是求1和5的和

-

求两个数的差

例如 9-1是求9和1的差

*

求两个数的乘积

例如 1*5是求1和5的积

/

求两个数的商

例如 25/5是求25和5的商

%

求两个数的余

例如 23/4是求23和4的余数,余数为3

**

幂运算

例如 3**3是求3的3次方为27

进行算术运算的命令

  1. expr

语法:

expr expression

expression是要计算的表达式

案例:

#!/bin/bash

#计算2和100的差

result=`expr 2 - 100`

echo "$result"

#计算2和100的和

result=`expr 2 + 100`

echo "$result"

#计算2和100的乘积

result=`expr 2 \* 100`

echo "$result"

#计算2和100的商

result=`expr 24 / 3`

echo "$result"

#先计算 2与6的差,然后再乘以12,即-48

result=`expr \( 2 - 6 \) \* 12`

echo "$result"

#错误的语法

result=`expr 2+5`

echo "$result"

#错误的语法

result=`expr 2-4*9`

echo "$result"

#错误的语法

result=`expr 1-(4-7)`

echo "$result"

分析:  用反引号将expr和表达式括起来,一定要注意运算符左右两边的空格,否则会得出错误的结果,另外expr不支持幂运算

2.使用$(())

使用这种方法进行算术运算写法比较自由,无需对运算符和括号做转义处理,可以用松散或者紧凑的格式来书写

案例:

#!/bin/bash

#紧凑格式

result=$((2+3))

echo "$result"

#松散格式

result=$(( 2 + 3 ))

echo "$result"

#计算3和6的乘积

result=$(( 3 * 6 ))

echo "$result"

#计算7和5的商

result=$(( 7 / 5 ))

echo "$result"

#计算8和3的余数

result=$(( 8 % 3 ))

echo "$result"

#复合运算

result=$(( ( 1-4 ) * 5 ))

echo "$result"

3.使用 $[..]

使用方括号同样可以执行算术运算,这种语法的特点与使用两个圆括号相同,无论是采用紧凑格式还是松散格式,都可以得到正确的结果,另外,算术表达式中的星号和圆括号也无需转义处理

案例:

#!/bin/bash

#加法运算

result=$[4+5]

echo "$result"

#复合运算

result=$[(1+2)*3]

echo "$result"

#幂运算

result=$[2 ** 4]

echo "$result"

结果:

Shell 从入门到精通系列 (第三章 条件判断语句下篇)_运算符_03

4.使用let命令

使用let命令可以执行一个或多个表达式,其中的变量名无需使用$符号,如果表达式中含有空格或者其他特殊字符,则必须将其引用起来

案例:

#!/bin/bash

#定义变量

n=10

#加法运算

let n=n+1

echo "$n"

#乘法运算

let n=n*10

echo "$n"

#幂运算

let n=n**1

echo "$n"

结果:

Shell 从入门到精通系列 (第三章 条件判断语句下篇)_运维开发_04


复合算术运算符

运算符

说明

举例

+=

将左边的数加上右边的数,然后再将和赋给左边的变量

例如 3+=5 等于8

-=

将左边的数减去右边的数,然后再将差赋给左边的变量

例如 5 -=2 等于3

*=

将左边的数乘以右边的数,然后再将积赋给左边的变量

例如 2 *= 8 等于16

%=

将左边的数对右边的数求模之后,再赋给左边的变量

例如 5 %=2 等于1

/=

将左边的数除以右边的数,然后再将商赋给左边的变量

例如 5 /=2 等于2

自增/自减运算符

简介

​这类运算符一共有4种,分别是前置自增,前置自减,后置自增,后置自减

运算符

说明

++variable

先将variable的值加1,然后再赋给variable

--variable

先将variable的值减1,然后再赋给variable

variable++

先使用variable的值,然后再将该变量的值加1

variable--

先使用variable的值,然后再将该变量的值减1

分析: 前置运算符都是先执行运算,然后再使用表达式的值;后置运算符则是先使用表达式的值,然后再执行自增或者自减运算

案例:

Shell 从入门到精通系列 (第三章 条件判断语句下篇)_自增_05

结果:

Shell 从入门到精通系列 (第三章 条件判断语句下篇)_运维开发_06

注意:

​无论是自增还是自减,都是针对变量而言的,不要对常量或者表达式执行自增或者自减运算。