宝剑锋从磨砺出,梅花香自苦寒来。这篇文章主要讲述条件判断语句下篇)相关的知识,希望能为你提供帮助。
多条件判断语句
- ?简介?
?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.使用$(())?
?#计算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不支持幂运算
使用这种方法进行算术运算写法比较自由,无需对运算符和括号做转义处理,可以用松散或者紧凑的格式来书写?案例:?
?#!/bin/bash?3.使用 $[..]
?#紧凑格式?
?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"?
使用方括号同样可以执行算术运算,这种语法的特点与使用两个圆括号相同,无论是采用紧凑格式还是松散格式,都可以得到正确的结果,另外,算术表达式中的星号和圆括号也无需转义处理?案例:?
?#!/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 |
?分析: 前置运算符都是先执行运算,然后再使用表达式的值;后置运算符则是先使用表达式的值,然后再执行自增或者自减运算??案例:?
?结果:?
?注意:
??无论是自增还是自减,都是针对变量而言的,不要对常量或者表达式执行自增或者自减运算。?
推荐阅读
- VNC 远程Windows 无声音
- 图解MongoDB数据库学习路线指南 #yyds干货盘点#
- #yyds干货盘点#K8S 之集群日志系统
- zabbix监控Apache+添加pv.uv#yyds干货盘点#
- 开发之痛(稳定的测试环境,怎么就那么难 | 研发效能提升36计)
- #yyds干货盘点# 基于STM32+ESP8266+华为云IoT设计的健康管理系统并完成应用侧开发
- #yyds干货盘点#Android C++系列(JNI引用管理)
- #yyds干货盘点# python scrapy 管道学习,并拿在行练手爬虫项目
- #yyds干货盘点# 如何保障你的 Kubernetes 集群资源不会被打爆(18)