- day3(续)
- 六、shell脚本
- 3.功能语句
- 3.1 说明性语句
- 以#开头的是注释,起解释说明作用
- 3.2 功能性语句
- 3.2.1 read
- 功能:read从标准输入读入一行,并且可以赋值给后面的变量
- 格式: read 变量1 变量2 变量3
- 把读入行中的第一个单词赋值给变量1,第二个单词赋值给变量2,以此类推。
- 把剩余的所有单词赋值给最后一个变量。
- read -p "提示语句" 变量列表:可以将提示语句输出,同时输入变量。
-
- 3.2.2 expr
- expr 表达式
- 注意:表达式中符号间必须用空格,元素引用$
- 可以直接输出结果,不过脚本里一般结合命令置换符把结果重新赋值给其他变量。
- 算术运算符命令expr主要用于进行简单的整数运算,包括加(+)、减(-)、乘(\*)、整除(/)和取余数(%)等操作, 小括号前面也要加\。
-
- 补充: 可以用双圆括号((表达式))进行运算,里面表达式和C语言写法一样。
- 3.2.3 test
- (1).字符串的测试
- s1 = s2 测试两个字符串的内容是否完全一样
- s1 != s2 测试两个字符串的内容是否有差异
- -z s1 测试s1 字符串的长度是否为0
- -n s1 测试s1 字符串的长度是否不为0
-
- (2).整数的测试
- a -eq b 测试a 与b 是否相等 equal
- a -ne b 测试a 与b 是否不相等 not equal
- a -gt b 测试a 是否大于b greater than
- a -ge b 测试a 是否大于等于b greater equal
- a -lt b 测试a 是否小于b litter than
- a -le b 测试a 是否小于等于b litter equal
-
- 补充操作符:
- -o 或运算 例如 [ $a -lt 20 -o $b -gt 100 ] 返回 true
- -a 与运算 例如 [ $a -lt 20 -a $b -gt 100 ] 返回 false
- ! 非运算 例如 [ ! false ] 返回 true
- && 逻辑与 例如 [[ $a -lt 100 && $b -gt 100 ]] 返回 false
- || 逻辑或 例如 [[ $a -lt 100 || $b -gt 100 ]] 返回 true
- | 位或 例如 echo $[2|2]
- &位与 例如 echo $[2&1]
- (3).文件属性的测试
- -d name 测试name 是否为一个目录
- -f name 测试name 是否为普通文件
- -e name 测试文件是否存在
-
- (1).字符串的测试
- 3.2.1 read
- 3.3 结构性语句
- 3.3.1 if语句
- 基本结构
- if 条件 then 命令表1 else 命令表2 fi
- 多路分支结构
- if 条件1 then 命令表1 elif 条件2 then 命令表2 fi
- 嵌套结构
- if 条件1 then if 条件2 then 命令表1 fi else 命令表2 fi
- 基本结构
- 3.3.2 case语句
- case 变量 in 模式1) 命令表1 ;; 模式2) 命令表2 ;; *) 命令表3 ;; esac
-
- 3.3.3 for循环
- for 变量名 in 单词表 do 命令表 done
- (1).for i in 1 2 3 4 do....done : 变量i从单词表中取值
- (2).for i do...done: 变量i从命令行取值,可以省略in单词表
- (3).for i in {1..10} do...done: 变量i从1-10个数中取值
- (4).for ((i = 0; i < 10; i++)) do...done: 书写格式类似c语言
-
- 3.3.4 while
- while 命令或表达式 do 命令表 done
-
- 3.3.5 循环控制语句
- break n: 结束n层循环
- continue n: 结束n层循环的本次循环,继续下一次循环
-
- 3.3.1 if语句
- 3.1 说明性语句
- 3.功能语句
- 七、数组
- 1. 数组的赋值
- (1)arr=(1 2 3 4 5)
- (2)arr=($1 $2 $3 $4...)
- (3)read a b c arrr=($a $b $c)
- (4)read -a arr
- 2. 数组的调用
- ${arr[i]} #引用数组元素,元素下标从0开始到n-1结束arr[i]=10 #对数组元素重新赋值
- ${arr[@]} #遍历数组
- ${#arr[@]} #数组元素个数
-
- 1. 数组的赋值
- 八、函数
- 1.函数定义方式
- (1)函数名() { 命令表 } (2)function 函数名() { 命令表 }
- 2.函数调用
- 函数名 参数列表
-
- 函数名 参数列表
- 1.函数定义方式
- 六、shell脚本