YU000HONG

持续学习,努力向前~

Shell特殊语法

2019-02-01     标签:  Shell

官方文档:Advanced Bash-Scripting Guide: Special Characters

官方文档:Bash Reference Manual

语法说明
$$Shell本身的PID(ProcessID)
$!Shell最后运行的后台Process的PID
$?最后运行的命令的结束代码(返回值)
$-使用Set命令设定的Flag一览
$*所有参数列表。如”$*“用「”」括起来的情况、以”$1 $2 … $n”的形式输出所有参数。
$@所有参数列表。如”$@”用「”」括起来的情况、以”$1” “$2” … “$n” 的形式输出所有参数。
$#添加到Shell的参数个数
$0Shell本身的文件名
$1~$n添加到Shell的各参数值。$1是第1参数、$2是第2参数…
#注释功能
~帐户的 home 目录
~user用户user的home目录
~+当前工作目录,和pwd作用相同
~-上次的工作目录
;在 shell 中,担任连续指令功能的符号就是分号
;;专用在 case 的选项,担任 Terminator 的角色
.逗号表示当前目录
..两个逗号表示上层目录
'被单引号用括住的内容,将被视为单一字串。在引号内的代表变数的$符号,没有作用,也就是说,他被视为一般符号处理,防止任何变量替换
"被双引号用括住的内容,将被视为单一字串。它防止通配符扩展,但允许变量扩展。这点与单引数的处理方式不同。
`反引号里面的字符串会被作为命令而执行
|管道
:在 bash 中,冒号是一个内建指令,表示什么事都不干,但返回状态值 0
?在文件名扩展上扮演的角色是匹配一个任意的字符,但不包含 null 字符
*在文件名扩展上扮演的角色是匹配任意字符,包含 null 字符
**两个星号在运算时代表次方的意思
$变量替换,在正则表达式中用来表示行的末尾(end-of-line)
${}bash 对 ${} 定义了不少用法:
- ${parameter:-word}
- ${parameter:=word}
- ${parameter:?word}
- ${parameter:+word}
- ${parameterffset}
- ${parameterffset:length}
- ${!prefix*}
- ${#parameter}
- ${parameter#word}
- ${parameter##word}
- ${parameter%word}
- ${parameter%%word}
- ${parameter/pattern/string}
- ${parameter//pattern/string}
( )用括号将一串连续指令括起来,这种用法对 shell 来说,称为指令群组。指令群组有一个特性,shell会以产生 subshell 来执行这组指令。
除了上述的指令群组,括号也用在 array 变量的定义上
(( ))这组符号的作用与 let 指令相似,用在算数运算上,是 bash 的内建功能。所以,在执行效率上会比使用 let指令要好许多。
{ }有时候 script 当中会出现大括号中会夹着一段或几段以分号做结尾的指令,这种用法与上面介绍的指令群组非常相似,但有个不同点,它在当前的 shell 执行,不会产生 subshell。 大括号也被运用在函数的功能上。广义地说,单纯只使用大括号时,作用就像是个没有指定名称的函数一般。
此外,大括号还常用在字串的组合上,如: {userA,userB,userC}-{home,bin,data}
[ ]常出现在流程控制中,扮演判断的作用。
这个符号在正则表达式中担任类似范围或集合的角色,如:rm -r 200[1234]
[[ ]]这组符号与先前的 [] 符号,基本上作用相同,但她允许在其中直接使用 ||&& 逻辑等符号。
||逻辑或
&&逻辑与
&单一个& 符号,且放在完整指令列的最后端,即表示将该指令列放入后台中工作
+在运算式中表示加法。
此外在正则表达式中,用来表示一或多个前面的字符
-在运算式中表示减法。
在 GNU 指令中,如果单独使用 - 符号,不加任何该加的文件名称时,代表标准输入的意思。
在 cd 指令中则比较特别,表示切换到上一次工作的目录:cd -
%在运算式中,用来表示除法
=常在变量设定时使用
==常在条件判断式中看到,代表等于的意思
!=常在条件判断式中看到,代表不等于的意思
^这个符号在规则表达式中,代表行的开头位置,在[]中也与!(叹号)一样表示“非”
>
>>
<
<<
:>
&>
2&>
2<>>&
>&n
>&-
<&n
<&-
<>
<<<
>|
参见:Shell重定向详解