shell中的特殊字符大全
推荐链接:
美元符号 $
用于 变量展开/引用 ,获取变量的值。echo $PATH
反引号 `…` 和 $()
`…` 用于 命令替换 ,执行反引号中的命令,并将其输出作为当前命令的参数。$() 是更现代的替代写法。
单引号 ''
强引用 (Strong Quote),单引号 (') 会阻止(抑制) Shell 进行变量替换,引用内的所有特殊字符都失去其特殊含义,被视为字面文本。
echo 'Value is: $PATH' (输出 Value is: $PATH)
双引号 ""
弱引用 (Weak Quote),引用内部大部分特殊字符失去特殊含义,但 $、 `\** 和 \** 仍保留其特殊功能(如:允许 Shell 进行变量替换)。
echo "Value is: $PATH" (输出 Value is: 变量的值)
管道符
管道可以把一系列命令连接起来,前一个命令的输出作为后一个命令的输入。
左边的命令应该有标准输出 | 右边的命令应该接受标准输入
1 | command1 | command2 |
等价于:
1 | command1 > tempfile |
>、>>、&>、>&、&
标准输入输出 、 重定向 、 Shell 输入/输出重定向
介绍
执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。
进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。
> :输出重定向,覆盖。> 相当于 1> ,前面默认有个 1 ,表示标准输出重定向,不包括标准错误。
左边的命令应该有标准输出 > 右边只能是文件
scriptname > filename :将 scriptname 的标准输出重定向到 filename 文件,若文件不存在则创建。
echo "123" > /home/123.txt :将 “123” 输出到 123.txt 文件中。
>> :输出重定向,追加。>> 相当于 1>> ,前面默认有个 1 ,表示标准输出重定向并追加,不包括标准错误。
scriptname >> filename 将 scriptname 的标准输出以追加的方式重定向到 filename 文件,若文件不存在则创建。
/dev/null 代表空设备文件,垃圾桶,类似windows的回收站。
0 :表示 stdin(Standardinput)标准输入。
1 :表示 stdout(Standardoutput)标准输出,系统默认值是1,所以 >/dev/null 等同于 1>/dev/null 。
2 :表示 stderr(Standarderror)标准错误输出。
>& :这里的 & 表示等同于的意思,2>&1 表示 2 的输出重定向(等同于)到 1 ,2 和 1 的输出合并。
&> :这里的 & 表示标准输出和标准错误输出,
& :单一个 & 符号放在命令的末尾,表示该命令转到后台执行。对于这样的命令,系统会创建一个 sub-shell 来运行这个命令,这个命令会立刻返回0并继续执行下面的 shell 命令。除此之外,在执行这个命令之后,terminal上会输出创建的sub-shell的线程ID(PID)。 仍会接收 SIGHUP 信号。关闭终端时进程通常会终止。
1 | [root@jonsnows home]# uname & echo 'asd' |
Linux Shell 1>/dev/null 2>&1 含义
1>/dev/null :表示标准输出重定向到空设备文件,也就是不输出任何信息到终端。2>&1 :表示标准错误输出重定向(等同于)到标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
1>/dev/null 2>&1 的简化版本 &>/dev/null ,但不适用 bourne shell 。
cmd >a 2>a 和 cmd >a 2>&1 不同
cmd >a 2>a :stdout和stderr都重定向到文件 a ,文件 a 会被打开两次,两个管道,由此导致stdout和stderr互相覆盖。cmd >a 2>&1 :stderr重定向到stdout,stdout重定向到文件 a。a文件只被打开一次,共用一个管道。
2>&1 和 2>1
2>1 :这里的 1 表示的是文件 1 ,并不代表标准输出。
2>&1 :& 与 1 结合就代表标准输出,变成标准错误重定向到标准输出。
1 | ls 2>1 # 不会报没有2文件的错误,但会输出一个空的文件1; |
2>&1 放在 > 前
2>&1 >/dev/null ,可以这么写,但并不能达到我们想要的效果。因为当解释器读到 2>&1, 它并不知道标准输出被重定向到垃圾桶,此时标准输出还在终端,所以标准错误输出并没有和后面的标准输出融合。
2>&1 >/dev/null :错误输出到终端,标准输出被重定向到垃圾桶。
1 | [root@localhost home]# ls aaa 2>&1 >output.txt |
nohup (不挂断)
使命令忽略挂起信号(SIGHUP),防止进程随终端关闭而停止。
免疫 SIGHUP 信号。关闭终端后进程仍能继续运行。
默认将输出重定向到当前目录下的 nohup.out 文件。
1 | 启动java服务 |
等价于
1 | 启动java服务,不适用 bourne shell |