会写 shell 脚本是很重要的能力(应该吧)
运行 shell 脚本的两种方式
脚本头加上 #!/bin/bash
或在执行时直接选定使用那个解释器 /bin/bash test.sh
记得在运行前为对应脚本加上相应的执行权限。
shell 变量
无需定义,直接赋值即可,要注意赋值的等号两边要避免使用空格。
使用变量时在变量前加上美元符号 $ 即可,要注意变量名外的花括号是可选的,但推荐给所有变量都加上花括号,以帮助解释器识别边界。
已经被定义的变量可以被重新定义。
可以使用 readonly 指令将变量定义为只读变量。
word="iamgood"
readonly word
可以使用 unset 指令删除变量。
unset word
在 shell 中,变量通常被视为字符串,可以使用单引号或双引号定义字符串。
数组变量:
arrray=(1,2,3,4)
环境变量:由操作系统或用户设置的特殊变量,用于配置 shell 的行为和影响其执行环境,常见的是 PATH。
特殊变量:
$0 表示脚本的名称;
$1、$2 表示脚本的参数;
$# 表示传递给脚本的参数数量;
$?表示上一个命令的退出状态。
shell 字符串
shell 字符串是最有用的数据类型,可以用单引号也可以用双引号,也可以不用引号。
单引号中的任何字符都会原样输出。
双引号中可以有变量和转义字符。
字符串拼接⭐⭐:
your_name="cola"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3
输出结果:
hello, cola ! hello, cola !
hello, cola ! hello, ${your_name} !
可以看到 shell 中字符串直接贴在后面就行了,不用 + 等。
获取字符串长度:
string=abcd
echo ${#string} # 输出4
变量为字符串时,${#string} 等价于 ${#string[0]}
提取字符串:
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo
注意:第一个字符的索引值为 0。
查找子字符串:
string="runoob is a great site"
echo `expr index "$string" io` # 输出 4
其中的反引号 ` ` 可以用 $( ) 来代替。这种语法是用来执行命令并将输出插入到命令中的特定位置。
shell 数组
bash 仅支持一维数组,并不限制数组的大小,数组下标从 0 开始编号。
定义数组的一般形式:
array_name=(value0 value1 value2 value3)
# 或
array_name=(
value0
value1
value2
value3
)
还可以单独定义数组的各个分量:
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
可以不使用连续的下标,且下标的范围没有限制。
读取数组元素值的一般格式是:
${数组名[下标]}
使用 @ 符号可以获取数组中的所有元素。
echo ${array_name[@]}
获取数组长度:
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
length=${#array_name[n]}
空命令
: 是一个空命令,什么也不执行,可以用来占位置。