多条件判断语句
- 简介
shel除了通过 if elif来处理多分支的情况外,还可以通过case语句来处理多分支,使用case语句可以使程序更加的有条理性
- case的基本语法
语法分析:
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
结果:
运算符
- 算术运算符
算术运算符分类:
运算符 | 说明 | 举例 |
+ | 求两个数的和 | 例如 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 |
进行算术运算的命令
- 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"
结果:
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"
结果:
复合算术运算符
运算符 | 说明 | 举例 |
+= | 将左边的数加上右边的数,然后再将和赋给左边的变量 | 例如 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 |
分析: 前置运算符都是先执行运算,然后再使用表达式的值;后置运算符则是先使用表达式的值,然后再执行自增或者自减运算
案例:
结果:
注意:
无论是自增还是自减,都是针对变量而言的,不要对常量或者表达式执行自增或者自减运算。