CH3 条件|运算
3.1 条件测试
条件测试返回值,真0,假非0(与大部分语言常识相反)。
可以通过echo $?输出返回值。($?含义待补充)
1、test命令 test expression
2、[命令 [ expression ],方括号和表达式之间必须要有空格。也写作双层方括号[[ expr ]]。
条件测试按测试内容分类,以下不同类型测试的expression,基本上都可以代入以上两种条件测试形式。
约定:expression代表测试表达式,op代表测试符。
3.1.1 字符串测试
常用五种字符串测试表达式。
字符串赋值:a="hello",【注意:等号在字符串变量赋值中左右不能有空格,在字符串比较中必须左右空格】
3.1.2 整数测试
整数测试表达式一般是两个整数的比较n1 op n2,理解一下六种比较符号的简写含义,即可轻松记忆。
-eq: equal
-ne: not equal
-gt: greater than
-ge: greater equal
-lt: less than
-le: less equal
3.1.3 文件测试
文件测试表达式op file,熟读op字母,联系含义单词记忆。
3.1.4 逻辑测试
与或非逻辑操作,高中数学知识,把数学符号替换为代码符号即可。
not【非】! !exp
and【与】-a exp1 -a exp2
or 【或】-o exp1 -o exp2
3.2 if条件语句
以下三种形式
if |
if-else |
if-elif |
|---|---|---|
| if expression then statement… fi |
if expression then statement… else statement… fi |
if expression then statement… elif then statement… else statement… fi |
| 单次判断,不考虑不符合情况 | 单次判断,考虑不符合情况 | 多重判断 |
expression在做if语句条件判断时,大部分情况为上节测试表达式加上方括号[ expression ]
空表达式:,表示不执行任何操作,默认返回零。
退出程序语句exit status,status为0-255整数,表示退出状态。$?为存储最近的返回值。$1未执行脚本时,后跟的第一个参数。
3.3 case条件语句
case |
|---|
| case variable in value1) statement… ;; value2) statement… ;; esac |
variable变量名,可加双引号或者不加,- case字句中,
value后加),且最后一条执行语句以;;结束。
3.4 运算符
expr命令,后接运算表达式,且运算符前后必须有空格$(())命令,中间包含运算表达式,运算符前后无需空格$[]命令,同上let命令,执行一个或者多个算数表达式,其中变量名无需使用$引用,
(1)算数运算符
+ |
- |
* |
/ |
% |
** |
|---|---|---|---|---|---|
| 加 | 减 | 乘 | 除 | 余 | 幂 |
+= |
-= |
*= |
/= |
%= |
|
(2)位运算符
<< |
>> |
& |
| |
~ |
^ |
|---|---|---|---|---|---|
(3)自增自减运算符
++variable |
variable++ |
--variable |
variable-- |
|---|---|---|---|
(4)数字常量进制
- 默认十进制
- 数字前加
0为八进制 - 数字前加
0x为十六进制
CH4 循环
for、util、while语句,continue、break关键字
4.1 for循环
for循环遍历列表 |
当列表缺省 | 类C风格for |
|---|---|---|
| for variable in {list} do statement… done |
for variable do statement… done |
for (( expr1; expr2; expr3)) do statement… done |
| — 遍历数字 for var in {1 2 3 4 5 6 7 8} for var in {1..8} for var in {1..8..1} #步长为1 — 遍历字符串 for var in {Mon Tue Wed Thu Fri Sat Sun} — 遍历数组 array = {Mon Tue Wed Thu Fri Sat Sun} for day in ${array[*]} |
#系统默认从命令行获取条件列表 #等价于遍历所有参数,即 for var in $@ for var in $* |
for (( i=1; i<5; i++)) |
4.2 util循环
4.3 while循环
until |
while |
|---|---|
| until expression do statement… done |
while expression do statement… done |
| 当expression为0时退出 | 当expression非0时退出 |
| #例子:累加前$1个数 | |
| #!/bin/sh i=1 sum=0 until [ “$i” -gt “$1” ] #i>$1 do sum=$(( sum + i)) i=$(( i + 1 )) done echo “$sum” |
#!/bin/sh i=1 sum=0 while [ “$i” -le $1 ] #i<=$1 do sum=$(( sum + i)) i=$(( i + 1 )) done echo “$sum” |
4.4 嵌套循环
4.5 continue和break
continue进入下一次循环
break停止当前循环
