一篇教会你写90%的shell脚本(入门小结)

2020-05-11 13:57:41王旭

4)获取字符串长度

在${}中使用“#”获取长度 name=“test”; echo ${#name}; # 输出为4

5)提取子字符串

1:4 从第2个开始 往后截取4个字符 ::4 从第一个字符开始 往后截取4个字符 name=“this is my name”; echo ${name:1:4} #输出 is i echo ${name::4} #输出 this

数组

bash只支持一维数组,不支持多维数组

定义数组:array_name=(li wang xiang zhang) (小括号做边界、使用空格分离) 单独定义数组的元素: array_para[0]=“w”; array_para[3]=“s” (定义时下标不连续也可以) 赋值数组元素:array_name[0]=“zhao”; 获取数组元素: array_name[0]=“li” array_name[3]=“zhang” echo ${array_name[0]} # 输出"li" echo ${array_name[1]} # 输出" " echo ${array_name[3]} # 输出"zhang" echo ${array_name[@]} # 输出"li zhang" 输出数组所有元素,没有元素的下标省略 取得元素个数:${#array_name[@]} 或者 ${#array_name[*]} 取得单个元素长度:${#array_name[1]}

参数传递

获取参数值: $0 : 固定,代表执行的文件名 $1 : 代表传入的第1个参数 $n : 代表传入的第n个参数 $#:参数个数 $*: 以一个单字符串显示所有向脚本传递的参数。如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数 $@:与$*相同,但是使用时加引号,并在引号中返回每个参数。 $$:脚本运行的当前进程号 $!:后台运行的最后一个进程的ID $?: 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 $* 与 $@ 区别 相同点:都是引用所有参数。 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 “1 2 3”(传递了一个参数),而 “@” 等价于 “1” “2” “3”(传递了三个参数)。

运算符

算数运算

+ 、-、*、 : 乘号前必须加进行转义才可以进行乘法运算 加法运算 val=`expr 2 + 2` (使用linux命令expr进行辅助运算) val=$[2+2] (4个空格不是必要的,不同于条件判断) val=$((2+2))

数字关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

下面假定变量 a 为 10,变量 b 为 20

-eq :检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。 -ne: 检测两个数是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。 -gt: 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。 -lt : 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。 -ge: 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。 -le : 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。