一直想整理一下 linux 相关的东西,终于能够静下来好好总结一下。
先总结一下之前写 sh 文件的时候,遇到很多符号不是很明白,先列出来到这里。
符号 | 代表 |
---|---|
$$ | 运行的 shell 本身的 pid |
$! | shell 最后运行的命令的后台的pid,也就是脚本上一步执行的命令 |
$? | 最后于行的命令的结束代码,就是返回值 |
$- | 使用set命令设定的flag一览(基本没用过) |
$* | 所有的参数列表,[$*] 以列表形式输出 |
$@ | 所有的参数列表,与$*相同 |
$# | 添加到 shell 的参数个数 |
$0 | shell 本身的文件名 |
$1, $2,... | shell 的参数| |
${$1:-$2} | 如果$1不为空则使用$1否则使用$2 |
接下来是有关${}
符号 | 代表 |
---|---|
${var} | 返回var值,var可以是指令 |
${#var} | 返回var的长度 |
${var:start_index} | 返回从start_index之后的值,若为${var:0-x}的形式,则是从倒数第 x 个开始返回到最后 |
${var:start_index:length} | 返回 start_index 之后的length个,若length为负数,表示剩余的length个不要 |
${var:- new} | 如果 var 为空或者未定义,则返回new,否则返回var |
${var:= new} | 如果 var 为空或者未定义,返回new,否则var赋值为new |
${var:+ new } | 如果 var 不为空,则返回new, 否则返回var |
${var:? new } | 若var为空或者未定义,将new写入标准错误中,执行失败,否则返回var |
${var/sub/new} | 非贪婪正则匹配,匹配var中的第一个sub为new |
${var//sub/new} | 贪婪正则匹配,匹配v 啊人中所有sub为new |
$(command) | 返回执行命令后的结果,相当于command
|
$((eval)) | 执行算术表达式 |
${file#*/} | 删掉file中第一个"/"及其左边的字符 |
${file##*/} | 删掉最后一个"/"及其左边的字符 |
${file#*.} | 删掉第一个"."及其左边的字符 |
${file##*.} | 删掉最后一个"."及其左边的字符 |
${file%/*} | 删掉最后一个"/"及其右边的字符 |
${file%%/*} | 删掉第一个"/"及其右边的字符 |
${file%.*} | 删掉最后一个"."及其右边的字符 |
${file%%.*} | 删掉第一个"."及其右边的字符 |
个人感觉,shell吸收了很多 脚本语言的特性,但是shell更加松散,没有那么严格。
嗯嗯,以上。