选项用来更改shell或/和脚本行为的机制.
set 命令用来在脚本里激活各种选项. 在脚本中任何你想让选项生效的地方,插入 set -o option-name 或, 用更简短的格式, set -option-abbrev. 这两种格式都是等价的.
1 #!/bin/bash 2 3 set -o verbose 4 # 执行前打印命令. 5 |
1 #!/bin/bash 2 3 set -v 4 # 和上面的有完全相同的效果. 5 |
为了在脚本里停用一个选项, 插入 set +o option-name 或 set +option-abbrev. |
1 #!/bin/bash 2 3 set -o verbose 4 # 激活命令回显. 5 command 6 ... 7 command 8 9 set +o verbose 10 # 停用命令回显. 11 command 12 # 没有回显命令了. 13 14 15 set -v 16 # 激活命令回显. 17 command 18 ... 19 command 20 21 set +v 22 # 停用命令回显. 23 command 24 25 exit 0 26 |
另一个在脚本里启用选项的方法是在脚本头部的#!后面指定选项.
1 #!/bin/bash -x 2 # 3 # 下面是脚本的主要内容. 4 |
从命令行来激活脚本的选项也是可以办到的. 一些不能和set一起用的选项可以用在命令行指定. -i是其中之一, 可以使脚本以交互方式运行.
bash -v script-name
bash -o verbose script-name
下面的表格列举了一些有用的选项. 它们都可以用简短格式来指定(以一个短横线开头)也可以用完整的名字来指定(用双短横线开头或用-o来指定).
表 30-1. Bash 选项
缩写 | 名称 | 作用 |
---|---|---|
-C | noclobber | 防止重定向时覆盖文件 (此作用会被>|覆盖) |
-D | (none) | 列出双引号引起的含有$前缀的字符串,但不执行脚本中的命令 |
-a | allexport | 导出所有定义的变量到环境变量中 |
-b | notify | 当后台任务终止时给出通知 (在脚本中用的不多) |
-c ... | (none) | 从...读命令 |
-e | errexit | 脚本发生第一个错误时就中止脚本运行,即当一个命令返回非零值时退出脚本 (除了until 或 while loops, if-tests, list constructs) |
-f | noglob | 文件名替换停用(指像*这样的符号不能替换为文件名了) |
-i | interactive | 使脚本以交互式方式运行 |
-n | noexec | 从脚本里读命令但不执行它们(语法检查) |
-o Option-Name | (none) | 调用Option-Name 选项 |
-o posix | POSIX | 更改Bash或脚本的行为,使之符合POSIX标准. |
-p | privileged | 脚本作为"suid"程序来运行 (小心!) |
-r | restricted | 脚本在受限模式中运行 (参考第21章). |
-s | stdin | 从标准输入读命令 |
-t | (none) | 第一个命令后就退出 |
-u | nounset | 当使用一个未定义的变量时产生一个错误信息,并强制退出脚本。 |
-v | verbose | 执行命令之前打印命令到标准输出 |
-x | xtrace | 与-v相似, 但打印完整的命令 |
- | (none) | 选项列表结束的标志. 后面的参数是位置参数(positional parameters). |
-- | (none) | 释放位置参数. 如果参数列表被指定了(-- arg1 arg2), 则位置参数被依次设置为参数列表中的值. |