CH3 条件|运算

3.1 条件测试

条件测试返回值,真0,假非0(与大部分语言常识相反)。
可以通过echo $?输出返回值。($?含义待补充)
1、test命令 test expression
2、[命令 [ expression ],方括号和表达式之间必须要有空格。也写作双层方括号[[ expr ]]

条件测试按测试内容分类,以下不同类型测试的expression,基本上都可以代入以上两种条件测试形式

约定:expression代表测试表达式,op代表测试符。

3.1.1 字符串测试

常用五种字符串测试表达式。
image.png
字符串赋值: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
image.png

3.1.3 文件测试

文件测试表达式op file,熟读op字母,联系含义单词记忆。
image.png
image.png

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)位运算符

<< >> & &#124; ~ ^

(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停止当前循环