shell变量

出处:《跟老男孩学Linux:Shell编程实战》
目录
shell中特殊位置参数变量
shell进程中的特殊状态变量
shell变量子串
【shell变量】shell特殊扩展变量
shell中特殊位置参数变量

位置变量 作用说明
$0 获取当前执行的shell脚本的文件名,如果执行脚本包含了路径,那么就包括脚本路径
$n 获取当前执行的shell脚本的第n个参数,n=1..9,当n为0时表示脚本的文件名;如果n大于9,则用大括号括起来,例如{$10},接的参数以空格隔开
$# 获取当前执行的shell脚本后面接的参数的总个数
$* 获取当前执行的shell脚本所有传参的参数,不加引号和$@相同;
如果给$*加上双引号,例如:"$*",则表示将所有的参数视为单个字符串,相当于"$1 $2 $3"
$@ 获取当前执行的shell脚本所有传参的参数,不加引号和@*相同;
如果给$@加上双引号,例如:"$@",表示将所有的参数视为不同的独立字符串,相当于"$1" "$2" "$3" "..."。
这是将多个参数传递给其他应用程序的最佳方式,因为它会保留所有的内嵌在每个参数里的任何空白。
当"$@"和"$*"都加双引号时,两者是有区别的;都不加双引号时,两者无区别

shell进程中的特殊状态变量
位置变量 作用说明
$? 获取执行上一个指令的执行状态返回值(0为成功,非零为失败),这个变量最常用
$$ 获取当前执行的shell脚本的进程号(PID)
$! 获取上一个在后台工作的进程的进程号(PID)
$_ 获取在此之前执行的命令或脚本的最后一个参数
提示:查找上述知识的方法为使用man bash命令,然后搜关键字“Special Parameters”。

shell变量子串
ID 表达式 说明
1 ${parameter} 返回变量$parameter的内容
2 ${#parameter} 返回变量$parameter内容的长度(按字符),也适用于特殊变量
3 ${parameter:offset} 在变量${parameter}中,从位置offset之后开始提取子串到结尾
4 ${parameter:offset:length} 在变量${parameter}中,从位置offset之后开始提取长度为length的子串
5 ${parameter#word} 从变量${parameter}开头删除最短匹配的word子串
6 ${parameter##word} 从变量${parameter}开头删除最长匹配的word子串
7 ${parameter%word} 从变量${parameter}结尾删除最短匹配的word子串
8 ${parameter%%word} 从变量${parameter}结尾删除最长匹配的word子串
9 ${parameter/pattern/string} 使用string代替第一个匹配的pattern
10 ${parameter//pattern/string} 使用string代替所有匹配的pattern

shell特殊扩展变量
表达式 说明
${parameter:-word} 如果parameter的变量为空或未赋值,则会返回word字符串并替代变量的值
用途:如果变量未定义,则返回备用的值,防止变量为空值或因未定义而导致异常
${parameter:=word} 如果parameter的变量为空或未赋值,则设置这个变量的值为word,并返回其值。
位置变量和特殊变量不适用
用途:基本上同上一个${parameter:-word},但该变量又额外给parameter变量赋值了
${parameter:?word} 如果parameter的变量为空或未赋值,那么word字符串将被作为标准错误输出,否则输出变量的值
用途:用于捕获由于变量未定义而导致的错误,并退出程序
${parameter:+word} 如果parameter的变量为空或未赋值,则什么都不做,否则word字符串将替代变量的值


    推荐阅读