跳转到内容

Bash Shell 脚本/符号索引

来自 Wikibooks,开放书籍,开放世界
符号 解释
!
  • 逻辑否定管道退出状态。例如,如果 grep YES votes.txt 返回 0,则 ! grep YES votes.txt 返回 1,但在其他方面等效。
  • 也由 [ ... ] 内置函数和条件表达式支持。例如,如果 [[ -e file.txt ]] 为真,则 [[ ! -e file.txt ]] 为假。
  • 也支持算术表达式。例如,如果 $i 非零,则 $(( ! i ))0
  • 另请参阅下文中的 #!
"…"
  • 引用一个参数(或参数的一部分),以便它不会被空格拆分为多个参数,但不会阻止参数扩展和命令替换在内部进行。
  • 另请参阅下文中的 $"…"
#
  • 引入注释(一直持续到行尾)。例如,命令 foo bar baz # bip 等效于命令 foo bar baz,因为注释 # bip 被删除了。
  • 在算术表达式中,形式为 b#n 的整数字面量被解释为 b 进制。例如,2#110110 是二进制 110110,即 54。
  • 另请参阅下文中的 #!
  • 另请参阅下文中的 $#
#!
  • (通常在读的时候称为 "shebang"。)用于可执行脚本的开头,指定用于运行脚本的解释器。例如,如果 script.pl 的第一行是 #!/usr/bin/perl,并且 script.pl 具有可执行权限,那么 ./script.pl 几乎等效于 /usr/bin/perl ./script.pl
  • Bash 脚本的第一行通常是 #!/bin/bash#!/bin/sh。(前者通常被认为更可取。)
$
  • 引入各种类型的扩展,尤其是参数扩展(如 $var${var})、命令替换(如 $(command))和算术扩展(如 $((expression)))。
$"…"
  • "…"(见上文)的一种变体,它支持特定于区域设置的翻译。(除非您正在编写用于多种语言(例如英语和法语)的脚本,否则您不必担心这一点。)
$#
  • 位置参数(脚本或函数的参数)的数量。例如,如果一个脚本被调用为 script.sh a b c,那么 $# 将是 3。修改位置参数的内置函数(如 shiftset)也会影响 $#
% 模运算符。返回整数除法所得的余数。例如 5%2 = 1
& 与号。通常用于在后台启动命令。例如 Firefox &
' 单引号。用于逐字引用文本。
( 左括号。用于表示子 shell 的开始,等等。
) 右括号。用于表示子 shell 的“EOF”。
* 星号。表示乘法。例如 5*2 = 10
+ 加号。表示加法。例如 5+2 = 7
, 逗号。用于分隔。例如 ls file{1,2,3}
- 连字符。表示减法。例如 5-2 = 3
. 句号。
/ 正斜杠。表示整数除法(例如 5/2=2)或路径的一部分(例如 /home/user)
: 冒号。
; 分号。如果不存在换行符/EOL,则分隔行。例如 echo hello; echo world
< 左尖括号。用于输入重定向
= 等号。用于赋值变量并检查相等性
> 右尖括号。用于输出重定向。
? 问号。
@ at 符号。通常用作包含传递给环境的所有参数的变量,如 $@
[ 左方括号。用作 test 的更具视觉吸引力的替代方法。例如,if [ condition ] ; then 等等
\ 反斜杠。最常用于转义。例如 rm file\ with\ a\ bunch\ of\ spaces.txt
] 右方括号。关闭测试外壳
^ 脱字符。
_ 下划线。
`…`
  • 触发命令替换;等效于 $(…),但更容易出错。
{ 左大括号。用于特定变量扩展。例如(其中 var = "hello ")echo "${var}world" 将打印 "hello world",echo "$varworld" 将生成一个错误,期望一个名为 varworld 的变量。
| 管道。用于将输入重定向到输出。具体来说,它将左侧命令的输出作为输入,运行右侧的程序,然后将第一个命令输出的内容传递给第二个命令,就好像它是在键盘上输入的。'ls -l | grep Desk' 等效于运行 "grep Desk",然后手动输入 ls -l 的输出。然后,每次按下回车键都会触发 grep,直到按下 ^D 以传递 EOF。
} 右大括号。
~ 波浪号。通常用于引用主目录。以 "mrwhite" 登录,cd ~(或只用 cd)将转到 /home/mrwhite。以其他用户登录,可以使用 'cd ~mrwhite' 获得相同的效果。
华夏公益教科书