信号捕捉trap
trap ‘触发指令’ 信号
自定义进程收到系统发出的指定信号后,将执行触发指令,而不会执行原操作
trap ‘’ 信号
忽略信号的操作
trap ‘-‘ 信号
恢复原信号的操作
trap -p
列出自定义信号操作
trap例程:
1 | !/bin/bash |
数组
变量:存储单个元素的内存空间
数组:存储多个元素的连续的内存空间,相当于多个变量的集合
数组名和索引
索引:编号从0开始,属于数值索引
注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本之后开始支持
bash的数组支持稀疏格式(索引不连续)
声明数组:
declare -a ARRAY_NAME
declare -A ARRAY_NAME: 关联数组
注意:两者不可相互转换
数组赋值
数组元素的赋值
(1) 一次只赋值一个元素
ARRAY_NAME[INDEX]=VALUE
weekdays[0]=”Sunday”
weekdays[4]=”Thursday”
(2) 一次赋值全部元素
ARRAY_NAME=(“VAL1” “VAL2” “VAL3” …)
(3) 只赋值特定元素
ARRAY_NAME=([0]=”VAL1” [3]=”VAL2” …)
(4) 交互式数组值对赋值
read -a ARRAY
显示所有数组:declare -a
引用数组
引用数组元素:
1 | `${ARRAY_NAME[INDEX]}` |
引用数组所有元素:
1 | `${ARRAY_NAME[\*]}` |
数组的长度(数组中元素的个数):
1 | `${#ARRAY_NAME[\*]}` |
删除数组中的某元素:导致稀疏格式
1 | `unset ARRAY[INDEX]` |
删除整个数组:
unset ARRAY
数组数据处理
引用数组中的元素:
数组切片:
1 | `${ARRAY[@]:offset:number}` |
向数组中追加元素:
1 | `ARRAY[${#ARRAY[*]}]=value` |
关联数组:
declare -A ARRAY_NAME
1 | `ARRAY_NAME=([idx_name1]='val1' [idx_name2]='val2‘...)` |
数组例程:
生成10个随机数保存于数组中,并找出其最大值和最小值
1 | !/bin/bash |
编写脚本,定义一个数组,数组中的元素是/var/log目录下所有以.log结尾的文件;统计出其下标为偶数的文件中的行数之和
1 | !/bin/bash |
shell中的字符串
字符串切片
1 | {#var}:返回字符串变量var的长度 |
字符串处理
基于模式取子串
${var#*word}:其中word可以是指定的任意字符
功能:自左而右,查找var变量所存储的字符串中,第一次出现的word, 删除字符串开头至第一次出现word字符之间的所有字符
${var##*word}:同上,贪婪模式,不同的是,删除的是字符串开头至最后一次由word指定的字符之间的所有内容
示例:
1 | file=“var/log/messages” |
${var%word\*}
:其中word可以是指定的任意字符
功能:自右而左,查找var变量所存储的字符串中,第一次出现的word, 删除字符串最后一个字符向左至第一次出现word字符之间的所有字符
file="/var/log/messages"
${file%/\*}: /var/log
${var%%word\*}
:同上,只不过删除字符串最右侧的字符向左至最后一次出现word字符之间的所有字符;
示例:
1 | url=http://www.google.com:80 |
查找替换
${var/pattern/substr}:查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substr替换之
${var//pattern/substr}: 查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substr替换之
${var/#pattern/substr}:查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替换之
${var/%pattern/substr}:查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替换之
查找并删除
${var/pattern}:删除var表示的字符串中第一次被pattern匹配到的字符串
${var//pattern}:删除var表示的字符串中所有被pattern匹配到的字符串
${var/#pattern}:删除var表示的字符串中所有以pattern为行首匹配到的字符串
${var/%pattern}:删除var所表示的字符串中所有以pattern为行尾所匹配到的字符串
字符大小写转换
${var^^}:把var中的所有小写字母转换为大写
${var,,}:把var中的所有大写字母转换为小写
变量赋值