Shell中的数组
-
数组的定义: 在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。
-
例,array=(java spring python shell linux sql "spring boot")
-
若是元素内也有空格,则必须使用引号
-
-
数组的赋值:
-
直接赋值:array=(java spring python shell linux sql "spring boot")
-
只给某个元素赋值:
-
array[1]=cvb;array[4]=bdc
-
array=([0]=java [2]=spring)
-
-
#!/bin/bash
#生成10个随机数赋给一个数组,并求出最大值
max=0
for i in {0..9};do
array[$i]=$RANDOM # $RANDOM可随机生成一个1到32767的数字
echo ${array[$i]}
[ ${array[$i]} -gt $max ] && max=${array[$i]}
done
echo "MAX:$max"
-
读取数组:
-
直接输出数组:echo $array,会直接输出数组的第一个元素,即java,这里与c很像
-
根据下标输出:echo $array[2],下标从0开始。
-
下标也是变量:echo ${array[$i]},即根据变量i输出数组的内容
-
-
获得数组的长度:echo ${#array[*]}或echo ${#array[@]}
-
同样的,获得数组内某个元素的长度:echo ${#array[$i]}
-
-
输出数组的所有元素:echo ${array[*]},也可以使用@符号,它与获得数组长度就是差了#号。
-
加#号就是计算长度,不加就是输出值。
-
-
数组切片:
-
${array[@]:offset:number}:表示从下标为offset开始取,取number个元素
-
${array[@]:offset}:从下标为offset开始取,取到数组最后
-
-
向数组中追加元素:array[${#array[*]}]=value
-
删除数组中某个元素:unset array[index],删除后这个位置会变成空
-
关联数组:类似于key-value键值对
-
array=([name1]=value1 [name2]=value2)
-
Shell字符串的操作
-
字符串切片:
-
${str:offset:number}:从offset开始取,取number个
-
${str: -length}:从字符串右侧开始取,取length个
-
-
字符串截取子串,声明str=/temp/data/sc,用作示例
-
${str#*word}:从左到右,查找str字符串中第一次匹配到的word字符,删除字符串开头到第一次出现word的地方之间的所有字符。
-
例,${str#*t},输出:emp/data/sc
-
-
${str##*word}:同上,不过是删除从字符串开头到最后一次匹配到word的地方。
-
例,${str##*t},输出:a/sc
-
-
${str%word*}:从右至左,查找str字符串中第一次匹配到的word字符,删除字符串的最后一个字符到word第一次出现的地方之间的所有字符串。
-
例,${str%t*},输出:/temp/da
-
-
${str%%word*}:同上,不过是删除从最后一个字符串到最后一次匹配到word字符之间的所有字符串。
-
例,${str%%t*},输出:/
-
-
-
字符串的查找替换:user=$(head -1 /etc/passwd),即user=root:x:0:0:root:/root:/bin/bash
-
${str/pattern/replace}:查找str所表示的字符串中第一次被pattern匹配的字符串,替换成replace
-
echo ${user/root/ROOT},输出:ROOT:x:0:0:root:/root:/bin/bash
-
-
${str//pattern/replace}:查找str所表示的字符串中所有被pattern匹配的字符串,替换成replace
-
echo ${user//root/ROOT},输出:ROOT:x:0:0:ROOT:/ROOT:/bin/bash
-
-
${str/#pattern/replace}:查找行首被pattern匹配的字符串,并使用replace替换匹配到的字符串
-
${str/%pattern/replace}:查找行尾pattern匹配的字符串,并使用replace替换匹配到的字符串
-
-
字符串的删除:
-
${str/pattern}:删除第一次被pattern匹配到的字符串。
-
${str//pattern}:同查找替换
-
${str/#pattern}:
-
${str/%pattern}:
-
-
字符的大小转换:
-
${str^^}:把str中所有小写字母转换成大写
-
${str,,}:把str中所有大写字母转换成小写
-
-
变量的赋值:
-
${str:-value}:如果变量str为空或不存在,返回value,否则返回str的值。
-
${str:=value}:如果变量str为空或不存在,把value的值赋给str,并返回。否则返回str的值
-
${str:+value}:如果变量str不为空,则返回value,否则,什么也不做。
-
${str:?error_info}:如果变量str为空或不存在,则返回错误信息。是以错误输出流的方式返回。否则,返回str的值。
-