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),这个值保存在 $?,请看下面的例子:
|
|
返回值为零表示执行成功,非零表示执行失败。&& 需要前一条命令的返回值为零才执行后面的命令。