三、Shell字符串
shell中的数据类型就两种:字符串、数字。
3.1. 字符串定义
单引号
' '方式:任何字符串都会原样输出,在这里面使用的变量是无效的
# 定义一个变量
var1=‘zhang: ${PATH}’echo ${var1}
# 得到的结果还是zhang: ${PATH}双引号
" "方式(推荐):双引号内包含了变量,那么该变量会被解析得到值,而不是原样输出
var2=“nihao ${PATH}”
echo var2
# nihao 后面就是环境变量的值(是没有引号的)要是想要让输出的值里带引号,就需要转义:
var=“you are \”${var2}\""
# 这样echo $var结果中,后面那串值就会带双引号不用引号的方式:
这与使用双引号类似,也会解析字符串中出现的变量,但是不能出现空格,否则空格后面的字符串会作为其它命令解析。
无空格:
# 在var1变量后面+一个nihao
var3=${var1}nihao
# 下面就自会输出nihao,后面就没了
var3=niao${var1}
注:以上都是用echo ${var3}输出得到。有空格:
new=“top”
# 这里一回车就会直接执行top
var5=nihao ${new}# 一回车就报错,说没有nihao这个命令
var6=${new} nihao# 这就会执行ls命令,
var7=${new} ls注: 这感觉意义不大,那不如不要定义变量,这行直接写要执行的命令就好了
3.2 获取字符串长度
语法:${#字符串变量名} # 里面的#是固定写法
var=“hello world”
# 下面会得到 11
echo ${#var}
3.3. 字符串拼接
定义两个变量:var1=abc; var2=hello
无符号拼接:var3=v a r 1 {var1}var1{var2}
# 中间不能有空格(有的话就是同上无引号有空格)
双引号拼接,# 任意拼接:var3="${var1} 123 ${var2}"
混合拼接:var3=${var1}‘123’${var2} 或者 var3=${var1}“123”${var2}
# 就还是使用双引号吧
3.4. 字符串截取
假设一个变量var=welcome to beijing,然后那个要找的char设定为e;
| 格式 | 说明 |
|---|---|
| ${变量名:start:length} | 从左侧start个字符开始, 向右截取length个字符,start从0开始; echo ${var:0:2} |
| ${变量名:start} | 不给length,就是向右截取完; echo ${var:2} |
| ${变量名:0-start:length} | 从右侧start个字符开始, 向右截取length个字符,start从1开始; echo ${var:0-5:2} |
| ${变量名:0-start} | 从右侧start字符,向右截取完; echo ${var:0-2} |
| ${变量名#*chars} | 从字符串左侧第一次出现char的位置开始, 截取char右边的所有字符; echo ${var#*e} |
| ${变量名##*chars} | 从字符串右侧第一次出现char的位置开始, 截取char右边的所有字符; echo ${var##*e} |
| ${变量名%chars*} | 从字符串右边第一次出现char的位置开始, 截取char左边的所有字符; echo ${var%e*} |
| ${变量名%%chars*} | 从字符串右边最后一次出现char的位置开始, 截取char左边的所有字符; echo ${var%%e*} |
Tips:这里是引用变量的字符串截取。
四、数组
定义:Shell支持数据(Array),但只支持一维数组
语法:在shell中,用括号( )来表示数组,数组之间用空格来分隔
方式1:array1=(item1 item2 …)
方式2:array2=([索引下标1]=item1 [索引下标2]=item2 …)
注意:等号=两边不能有空格。
示例:
arr1=(123 456 “nihao”)
arr2[5]=100
# arr2也不用事先定义,那也只有${arr2[5]}才有值,其它都没arr3=([0]=123 [3]=“nihao” [9]=“都可以”)
# 不一定非得是按照顺序来变
元素的获取: # 注意必须使用{ }
- 通过下标:${arr[index]}
- 获取值同时赋值给其它变量:item=${arr[index]}
- 使用
@或*可以获取数组中的所有元素:${arr[@]}、${arr[*]} - 获取数组的长度或个数:
${#arr[@]}、${#arr[*]} - 获取数组指定元素的字符长度:
${#arr[index]}
数组的拼接:就是将两个数组连接成一个数组
语法:使用@或*获取数组所有元素后进行拼接
array_new=(${array1[@]} ${array2[@]} …)
array_new=(${array1[*]} ${array2[*]} …)
数组的删除:
删除数组的指定元素:
- unset 数组名[index] # 就好比是 unset array_new[2]
删除整个数组:
- unset 数组名 # 其实就是把这个变量名删除