shell 语法
目录
注释
一行中 #
及其后面的字符会被 shell 忽略,这被称为注释。
|
|
引号
引号将字符包裹起来恢复其字面量,单引号里面所有特殊字符均恢复字面量,而双引号则保留 $
`
\
这 3 个符号的特殊含义 (`
是反引号)。请看下面的例子:
|
|
echo foo # bar
其中 # bar
为注释,用引号包裹起来则恢复 #
字面量。双引号中仍然可以使用变量,而单引号不可以。
转义字符
转义字符可恢复特殊字符的字面量,例如:
|
|
换行符 \n
echo
可以一次输出多行文本,请看下面的例子:
|
|
echo -e
开启转义序列,可识别换行符 \n
、制表符 \t
等符号。
命令序列
可以在一行书写多条独立的命令,它们会按顺序执行,这需要下列符号支持:
;
多条命令写在一行用;
隔开,将按顺序执行。&&
若前面的命令返回值为非零 (执行成功),则继续执行后面的命令。||
若前面的命令返回值为零 (执行失败),则继续执行后面的命令。&
可将多条命令隔开,类似;
,不同点在于此符号放在命令末尾将调用子进程异步执行该命令,也称为后台任务。
例如:
|
|
后台任务
&
可用于执行后台任务,请看下面的例子:
|
|
sleep 3; echo foo
会延迟 3 秒再执行 echo
;将 ;
换成 &
则 sleep
在子进程执行,不会阻塞后面的命令。
jobs
可列出活动的后台任务,fg
可将后台任务切换到前台 (然后按 Ctrl
+ C
可终止),kill
可直接终止后台任务。
命令返回值
一条命令执行完成后会得到一个返回值 (exit status),这个值保存在 $?
,请看下面的例子:
|
|
返回值为零表示执行成功,非零表示执行失败。&&
需要前一条命令的返回值为零才执行后面的命令。