shell脚本编程
注释
#单行注释
以#
开始, 从#
开始直到行尾都会被当做注释
#多行注释
1 | :<<EOF |
EOF
可以换成任意内容
变量
#定义变量
变量名=值
注意等号前后不能有空格
1 | a=1 |
#使用变量
读取变量的值时需要在前面添加$
1 | echo $a |
#修改变量
再次修改变量的值时不需要添加$
1 | a=2 |
#只读变量
readonly 变量名
可以将一个变量设置为只读
#删除变量
unset 变量名
数据类型
#数字
#字符串
可以用单引号括起来也可以用双引号, 区别是单引号括起来的字符串不会转义
1 | a=1 |
#拼接字符串
1 | greeting="hello"; |
#获取字符串长度
1 | echo ${#msg} |
#截取字符串
格式见示例, 两个参数分别为起始位置和长度
1 | echo ${msg:4:3} o w |
数组
数组名=(元素1 元素2 ... 元素n)
1 | a=(1 2 3) |
也可以单独定义数组的各个分量
1 | arr[0]=1 |
shell中数组的下标从0开始, 可以不是连续的
#读取数组元素
${数据名[下标]}
下标使用 @
符号可以获取数组中的所有元素
1 | a=(1 2 3 4 5) |
#获取数组的长度
1 | echo ${#arr[@]} 或 |
控制流
#条件分支
1 | if condition1 |
#循环语句
for-in循环
1 | for index in 1 2 3 4 5; do |
for-i循环
1 | for ((i=0; i<5; i++)); do |
while循环
1 | i=1 |
调用参数
调用脚本时可以传递一些参数, 在脚本内可以通过如下转义表达式获取参数
参数处理 | 说明 |
---|---|
$# | 传递到脚本的参数个数 |
$n | 传递到脚本的第n个参数, 0为脚本文件名 |
$* | 以一个单字符串显示所有向脚本传递的参数。 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$* 相同,但是每个参数都会带引号。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
1 |
|