出处:《跟老男孩学Linux: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字符串将替代变量的值 |