第 30 章. 选项

选项用来更改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       

Note

为了在脚本里停用一个选项, 插入 set +o option-nameset +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 选项

缩写 名称 作用
-Cnoclobber 防止重定向时覆盖文件 (此作用会被>|覆盖)
-D(none) 列出双引号引起的含有$前缀的字符串,但不执行脚本中的命令
-aallexport 导出所有定义的变量到环境变量中
-bnotify 当后台任务终止时给出通知 (在脚本中用的不多)
-c ...(none) ...读命令
-eerrexit 脚本发生第一个错误时就中止脚本运行,即当一个命令返回非零值时退出脚本 (除了untilwhile loops, if-tests, list constructs)
-fnoglob 文件名替换停用(指像*这样的符号不能替换为文件名了)
-iinteractive 使脚本以交互式方式运行
-nnoexec 从脚本里读命令但不执行它们(语法检查)
-o Option-Name(none) 调用Option-Name 选项
-o posixPOSIX 更改Bash或脚本的行为,使之符合POSIX标准.
-pprivileged 脚本作为"suid"程序来运行 (小心!)
-rrestricted 脚本在受限模式中运行 (参考第21章).
-sstdin 从标准输入读命令
-t(none) 第一个命令后就退出
-unounset 当使用一个未定义的变量时产生一个错误信息,并强制退出脚本。
-vverbose 执行命令之前打印命令到标准输出
-xxtrace -v相似, 但打印完整的命令
-(none) 选项列表结束的标志. 后面的参数是位置参数(positional parameters).
--(none) 释放位置参数. 如果参数列表被指定了(-- arg1 arg2), 则位置参数被依次设置为参数列表中的值.