**调用
表B-1和表B-2分别列出了在调用bash 2.x和1.x时所使用的选项。多字符选项必须出现在命令行中单字符选项前。另外,任何set选项都可在命令行上使用,见表B-6。登录shell通常使用选项-i(交互式)、-s(从标准输入中进行读取)和-m(使能作业控制)调用。
表B-1 命令行选项
选项 含义
-c string 从string中读取命令。string后的任何参数均被解释为从$0开始的位置参数。
-D 将所有前面加$符号的双引号字符串列表打印在标准输出上。在当前环境不是C或POSIX时,这些字符串会受语言转换。同时它还启用了-n选项。
-i 交互式shell。忽略信号TERM、INT和QUIT。作业控制生效,TTIN、TTOU和TSTP也被忽略。
-o option 接受像set -o一样的参数。
-s 从标准输入中读取命令。如果向bash给出参数,则该标志优先(即参数不会被看作脚本名,标准输入将被读取)。
-r 受限制shell,详细内容请参见第十章。
- 发出选项结束信号,屏蔽进一步选项处理。之后的任何选项都被看作文件名和参数。--与-意思相同。
--dump-strings 与-D相同。
--help 显示用法信息并退出。
--login 使bash作为登录shell被调用。
--noediting 如果为交互式shell,不使用GNU readline库读取命令行。
--noprofile 不读取启动文件/etc/profile或其他任何个人的初始化文件。
--norc 如果为交互式shell,不读取初始化文件~/.bashrc。如果shell作为sh被调用,则默认为on。
--posix 改变bash的行为以符合与bash默认操作不一样的POSIX规则。
--quiet shell启动时不显示信息,此为默认行为。
--rcfile file 如果shell为交互式,执行从file中读取的命令而不是初始化文件~/.bashrc。
--version 显示bash实例的版本号,然后退出。
表B-2 旧的命令行选项
选项 含义
-c string 从string中读取命令。string后的任何参数均被解释为从$0开始的位置参数。
-i 交互式shell。忽略信号TERM、INT和QUIT。作业控制生效,TTIN、TTOU和TSTP也被忽略。
-s 从标准输入中读取命令。如果向bash给出参数,则该标志优先(即参数不会被看作脚本名,标准输入将被读取)。
-r 受限制shell,详细内容请参见第十章。
- 发出选项结束信号,屏蔽进一步选项处理。之后的任何选项都被看作文件名和参数。--与-意义相同。
-norc 如果为交互式shell,不读取初始化文件~/.bashrc。如果shell作为sh被调用,则默认为on。
-noprofile 不读取启动文件/etc/profile或其他任何个人的初始化文件。
-rcfile file 如果shell为交互式,执行从file中读取的命令而不是初始化文件~/.bashrc。
-version 启动时显示bash实例的版本号。
-quiet shell启动时不显示信息,此为默认行为。
-login 使bash作为登录shell被调用。
-nobraceexpansion 不执行大括号扩展。
-nolineediting 如果为交互式shell,不使用GNU readline库读取命令行。
-posix 改变bash的行为以符合与bash默认操作不一样的POSIX准则。
**内置命令和保留字
表B-3列出了所有内置命令和保留字。
表B-3 命令和保留字
命令 介绍章节 总结
! 五 保留字。一个命令退出状态的逻辑NOT。
: 七 空操作(仅对所有参数进行扩展)。
. 四 在当前shell内读文件并执行其内容。
alias 三 建立命令或命令行的缩写。
bg 八 将作业放到后台。
bind 二 将一个键序列绑定到一个readline函数或宏。
break 五 从包围的for、select、while或until循环中退出。
builtin 五 执行指定的shell内置命令。
case 五 保留字。多路条件结构。
cd 一 改变工作目录。
command 七 跳过shell函数查询直接运行命令。
continue 跳到for、select、while或until循环的下一步。
declare 六 声明变量并给出其属性。
dirs 六 显示当前被记忆的目录列表。
disown 八 从作业表中删除一个作业。
do 五 保留字。for、select、while或until循环结构的一部分。
done 五 保留字。for、select、while或until循环结构的一部分。
echo 四 扩充并打印任何参数。
elif 五 保留字,if结构的一部分。
else 五 保留字,if结构的一部分。
enable 七 使能或屏蔽内置shell命令。
esac 五 保留字,case结构的一部分。
eval 七 通过命令行处理运行给定的参数。
exec 九 用给定的程序替换shell。
exit 五 从shell退出。
export 三 创建环境变量。
fc 二 修改命令(编辑历史文件)。
fg 八 把后台作业放到前台。
fi 五 保留字,if结构的一部分。
for 五 保留字,循环结构。
function 四 定义一个函数。
getopts 六 处理命令行选项。
hash 三 确定并记忆完整路径名。
help 一 显示内置命令的帮助信息。
history 一 显示命令历史。
if 五 保留字,条件结构。
in 五 保留字,case结构的一部分。
jobs 一 列出任意后台作业。
kill 八 向一个进程发送信号。
let 六 算术变量赋值。
local 四 创建一个局部变量。
logout 一 退出登录shell。
popd 四 从目录堆栈中删除一个目录。
pushd 四 向目录堆栈加入一个目录。
pwd 一 打印工作目录。
read 七 从标准输入中读一行。
readonly 六 使变量成为只读(不可赋值)。
return 五 从包围的函数或脚本中返回。
select 五 保留字,菜单生成结构。
set 三 设置选项。
shift 六 命令行参数移位。
suspend 挂起一个shell的执行。
test 五 评估一个条件表达式。
then 五 保留字,if结构的一部分。
time 保留字,运行命令管道行并打印执行时间。输出格式可用TIMEFORMAT控制。
times 打印从shell运行的进程的累计用户时间和系统时间。
trap 八 设置一个信号陷阱过程。
type 三 识别一个命令源。
typeset 六 声明变量并给出其属性,等同于declare。
ulimit 十 设置/显示进程资源限制。
umask 十 设置/显示文件权限转义。
unalias 三 删除别名定义。
unset 三 删除变量或函数定义。
until 五 保留字,循环结构。
wait 八 等待后台作业完成。
while 五 保留字,循环结构。
**环境变量
表B-4给出了bash 2.0中可用的环境变量。类型列的字母含义如下:A=数组,L=冒号分隔列表,R=只读,U=取消(unset)会使其失去其特殊含义。
注意,变量BASH_VERSINFO,DIRSTACK,GLOBIGNORE,GROUPS,HISTIGNORE,HOSTNAME,LANG,LC_ALL,LC_COLLATE,LC_MESSAGE,MACHTYPE,PIPESTATUS,SHELLOPTS和TIMEFORMAT在bash 2.0版本前不可用。BASH_ENV替代了早期版本中的几ENV。
表B-4 环境变量
变量 所在章节 类型 说明
* 四 R 传给当前脚本或函数的位置参数
@ 四 R 传给当前脚本或函数的位置参数
# 四 R 传给当前脚本或函数的参数个数
- R 调用中向shell给出的选项
? 五 R 前面命令的退出状态
_ R 前面命令的最后一个参数
$ 八 R shell进程的进程ID
! 八 R 最后一个后台命令的进程ID
0 四 R shell或shell脚本的名字
BASH 三 用于调用bash实例的完全路径名
BASH_ENV 三 调用shell时作为环境文件运行的文件名
BASH_VERSION 三 bash实例的版本号
BASH_VERSINFO 三,六 AR bash实例的版本信息。数组中每个元素都保存版本号的一部分
CDPATH 三 L cd命令搜索目录列表
DIRSTACK 四,六 ARU 目录堆栈的当前内容
EUID R 当前用户的有效用户ID
FCEDIT 二 fc命令的默认编辑器
FIGNORE L 进行文件名自动完成时要忽略的名字列表
GLOBIGNORE L 在路径名扩展时定义忽略的文件名的模式列表
GROUPS AR 包含当前用户成员组的列表
IFS 七 内部域分隔符:充当单词分隔符的字符列表。一般设为SPACE、TAB和NEWLINE
HISTCMD 三 U 当前命令的历史编号
HISTCONTROL 三 控制命令历史中的输入内容
HISTFILE 二 命令历史文件的名字
HISTIGNORE 三 决定历史列表中应保留内容的模式列表
HISTSIZE 二 保存在命令历史中的行数
HISTFILESIZE 三 保存在历史文件中的最大行数
HOME 三 主(登录)目录
HOSTFILE 三 用于自动完成主机名的文件
HOSTNAME 当前主机名
HOSTTYPE 三 运行bash的机器的类型
IGNOREEOF 三 退出一个交互式shell前收到的EOF字符数
INPUTRC 二 readline启动文件
LANG 用于名判断不以LC_开头的变量的地区类别
LC_ALL 覆盖LANG取值和任何其他指定一个地区类别的LC_变量
LC_COLLATE 判断在对路径名扩展结果排序时所用的次序
LC_MESSAGES 此变量决定前面加$符号的双引号字符串的地区
LINENO 九 U 运行于一个脚本或函数内的行数
MACHTYPE 描述bash所运行系统的字符串
MAIL 三 检查新邮件的文件名
MAILCHECK 三 检查新邮件的频率(秒数)
MAILPATH 三 L 如果没有设置MAIL,它是检查新邮件的文件名列表
OLDPWD 三 前面的工作目录
OPTARG 六 getopts处理的最后一个选项参数的取值
OPTERR 六 如果设置为1,显示来自getopts的错误信息
OPTIND 六 选项后第一个参数的编号
OSTYPE 执行bash的操作系统
PATH 三 L 命令的搜索路径
PIPESTATUS 六 A 包含最近在前台管道行执行的进程的退出状态值列表的数组变量
PROMPT_COMMAND 在显示基本提示符前,该值作为命令执行
PS1 三 基本命令提示字符串
PS2 三 续行提示字符串
PS3 五 select命令提示字符串
PS4 九 xtrace选项提示字符串
PPID 八 R 父进程的进程ID
PWD 三 当前工作目录
RANDOM 九 U 在0到32767(2的15次方 -1)之间的随机数
REPLY 五,七 用户对select命令的响应。如果未给出变量名,则为read命令的结果
SECONDS 三 U shell被调用以来的经过秒数
SHELL 三 shell的完全路径名
SHELLOPTS LR 可用shell选项的列表
SHLVL 每次调用bash,该计数加1
TIMEFORMAT 指定在命令管道行中使用time保留关键字的输出格式
TMOUT 十 如果设置为正数,即为shell在没有接收到输入而自动中止的秒数
UID R 当前用户的用户ID
auto_resume 控制作业控制的工作方式
histchars 指定用作历史控制字符的内容。正常情况设置为字符串"!#"
**测试操作符
表B-5列出test和[...]结构使用的操作符。它们逻辑上可结合-a(与)和-o(或),并通过经过转义的圆括号(\(...\))进行组合。字符串比较<和>在bash 2.0版本前不可用。
表B-5 测试操作符
操作符 如果为真
-b file file存在并且为一个块设备文件
-c file file存在并且为一个字符设备文件
-d file file存在并且为一个目录
-e file file存在
-f file file存在并且为一个正规文件
-g file file存在并且设置了setgid位
-G file file存在并且为有效的组ID所有
-k file file存在并且设置了粘性位
-L file file存在并且为一个符号链接
-n string string为非null
-O file file存在并且为有效的用户ID所有
-p file file存在并且为一个管道或命名管道(FIFO文件)
-r file file存在并且可读
-s file file存在并且非空
-S file file存在并且为一个套接字
-t N 文件描述符N指向一个终端
-u file file存在并且设置了setuid位
-w file file存在并且可写
-x file file存在并且可执行或file为一个可被搜索的目录
-z string string长度为0
fileA -nt fileB fileA比fileB要新
fileA -ot fileB fileA比fileB要旧
fileA -ef fileB fileA和fileB指向同一个文件
stringA = stringB stringA与stringB相同
stringA != stringB stringA不匹配stringB
stringA < stringB 按字典顺序排序时stringA在stringB之前
stringA > stringB 按字典顺序排序时stringA在stringB之后
exprA -eq exprB 算术表达式exprA与exprB相等
exprA -ne exprB 算术表达式exprA与exprB不等
exprA -lt exprB exprA比exprB要小
exprA -gt exprB exprA比exprB要大
exprA -le exprB exprA小于等于exprB
exprA -ge exprB exprA大于等于exprB
exprA -a exprB exprA为真且exprB也为真
exprA -o exprB exprA为真或exprB为真
**set选项
表B-6列出可使用set -arg命令打开的选项。除了特别注明,初始状态全部为关闭。这里列出的全名是set -o 使用的set参数。全名braceexpand,histexpand,history,keyword和onecmd在bash 2.0前版本中不可用。另外,在这些版本中,可使用-d开关哈希表。
表B-6 set选项
选项 全名 含义
-a allexport 导出所有后来定义的或已修改的变量
-B braceexpand shell执行大括号扩展,默认为打开
-b notify 立即报告中断的后台作业的状态
-C noclobber 不允许重定向覆盖已存在的文件
-e errexit 当一个简单的命令以非0状态退出时退出shell。一个简单命令就是指该命令不是while,until或if的一部分,不是&&或||列表的一部分,也不是其返回值用!取反的命令
emacs 使用emacs风格命令行编辑
-f noglob 屏蔽大括号扩展
-H histexpand 使能!风格历史替换。在一个交互式shell中缺省为打开
history 使能命令历史,在交互式shell默认为打开
-h hashall 屏蔽命令的散列
ignoreeof 不允许使用CTRL-D退出shell
-k keyword 把关键字参数放在一个命令的环境中
-m monitor 使能作业控制(在一个交互式shell中默认为打开)
-n noexec 读取命令并检查语法,但不执行。被交互式shell忽略
-P physical 改变当前目录的命令不遵循符号链接,使用物理目录
-p privileged 以suid模式运行脚本
posix 将默认行为改为POSIX 1003.2行为,后者与标准有点差别
-t onecmd 读取并执行一个命令后退出
-u nounset 把未定义变量看作错误,而不是null
-v verbose 在运行前打印shell输入行
vi 使用vi风格命令行编辑
-x xtrace 在运行前打印命令(扩展之后的)
- 选项结尾信号。其后面的参数被设置为位置参数。-x和-v被关闭。如果没有设置set的其余参数,位置参数保持不变
-- 后面不带参数时,使位置参数失效。否则,位置参数被设置为之后的参数(即使它们以-开始)
**shopt选项
shopt选项可使用shopt -sarg设置,以及使用shopt -uarg取消设置。其选项见表B-7。bash 2.0前版本具有执行此设置功能的环境变量。设置这些变量等同于shopt -s。
这些变量(和相应的shopt选项)为:allow_null_glob_expansion (nullglob), cdable_vars (cdable_vars), command_oriented_history (cmdhist), glob_dot_filenames (dotglob), no_exit_on_failed_exec (execfail)。这些变量已不再存在。
表B-7 shopt选项
选项 如果设置,含义如下
cdable_vars cd的非目录参数被假定为取值为要改变的目录的变量名。
cdspell 如果存在合适的匹配,向cd命令给出的目录的拼写小错误被改正。改正包括遗漏字母、字母不正确或字母调换。只对交互式shell可用。
checkhash 在哈希表中找到的命令在执行前要检查其存在性。不存在就强制进行PATH搜索。
checkwinsize 检查每个命令后的窗口大小,如果被改变,相应修改变量LINES和COLUMNS。
cmdhist 试图将一个多行命令的所有行保存到一笔单一的历史记录中。
dotglob 以点开始的文件名被包含在路径名扩展中。
execfail 非交互式shell如果不能执行exec的参数将不会退出。如果exec失败,交互式shell不退出。
expand_aliases 别名被扩展。
histappend 当shell退出时,历史列表被附加到由变量HISTFILE取值命名的文件中而不是覆盖文件。
histreedit 如果正使用readline,给出重新编辑一个失败的历史替换的机会。
histverify 如果正使用readline,历史替换的结果不是立即被传递到shell解析器,而是将结果载入readline编辑缓冲中,以允许进一步修改。
hostcomplete 如果正使用readline,当以@开头的单词被自动完成时,试图进行主机名自动完成。
interactive_comments 在交互式shell中忽略允许以#开头的单词和该行上所有后续字符。
lithist 如果启用了cmdhist选项,多行命令被保存到可嵌入新行的历史中,而不是使用分号分隔符。
mailwarn 如果用于检查邮件的文件自从上一次被检查后又被访问,则显示“mailfile中邮件已被读取”的信息。
nullglob 允许不匹配任何文件的模式扩展为null字符串而不是自身。
promptvars 提示字符串在参数和变量扩展后被扩展。
shift_verbose shift内置命令如果移过了最后一个位置参数,则打印错误信息。
sourcepath source内置命令使用PATH取值找出包含作为参数给出的文件的目录。
**I/O重定向
表B-8给出I/O重定向符的完整列表(该表在前面的表7-1中也给出)。注意,指定标准输出和错误重定向有两种方式:&>file和>&file。第二种是本书所选择使用的方式。
表B-8 I/O重定向符
重定向符 功能
cmd1 | cmd2 管道,接受cmd1的标准输出作为cmd2的标准输入。
> file 将标准输出定向到file。
< file 从file接受标准输入。
>> file 将标准输出定向到file;如果file存在则附加到后面。
>| file 即使设置了noclobber仍强制标准输出到file。
n>| file 即使设置了noclobber仍强制从文件描述符n中输出到file。
<> file 使用file同时作为输入和输出。
n<> file 使用file同时作为文件描述符n的输入和输出。
<< label Here-document。
n> file 将文件描述符n定向到file。
n< file 从file中接受文件描述符n。
>> file 将文件描述符n定向到file,如果file存在则附加到后面。
n>& 复制标准输出到文件描述符n。
n<& 复制标准输入到文件描述符n。
n>&m 文件描述符n形成输出文件描述符m的副本
n<&m 文件描述符n形成输入文件描述符m的副本
&>file 定向标准输出和标准错误到file
<&- 关闭标准输入
>&- 关闭标准输出
n>&- 关闭从文件描述符n的输出
n<&- 关闭从文件描述符n的输入
**emacs模式命令
表B-9是emacs编辑模式命令的完整列表。
表B-9 emacs模式命令
命令 含义
CTRL-A 移动到行首
CTRL-B 向后移动一个字符
CTRL-D 向前删除一个字符
CTRL-E 移动到行尾
CTRL-F 向前移动一个字符
CTRL-G 退出当前编辑命令,并发终端警报信号
CTRL-J 与RETURN一样
CTRL-K 向前删除到行尾
CTRL-L 清除屏幕,重新显示行
CTRL-M 与RETURN一样
CTRL-N 命令历史中的下一行
CTRL-O 与RETURN一样,然后显示历史文件中的下一行
CTRL-P 命令历史中的前一行
CTRL-R 向后搜索
CTRL-S 向前搜索
CTRL-T 颠倒两个字符
CTRL-U 从该位置向后删除到行首
CTRL-V 使下一字符逐字被键入
CTRL-V TAB 插入一个TAB
CTRL-W 删除光标后单词,使用空白做边界
CTRL-X / 列出当前单词的可能文件名完成情况
CTRL-X ~ 列出当前单词的可能用户名完成情况
CTRL-X $ 列出当前单词的可能shell变量完成情况
CTRL-X @ 列出当前单词的可能主机名完成情况
CTRL-X ! 列出当前单词的可能命令名完成情况
CTRL-X ( 开始保存字符到当前关键字宏内
CTRL-X ) 停止保存字符到当前关键字宏内
CTRL-X e 再次执行定义的最后一个关键字宏
CTRL-X CTRL-R 读readline初始化文件的内容
CTRL-X CTRL-V 显示该bash实例的版本信息
CTRL-Y 检索被删除的最后一个条目
DEL 向后删除一个字符
CTRL-[ 与ESC一样(大多数键盘)
ESC-B 向后移动一个单词
ESC-C 改变本位置后所有单词为大写字母
ESC-D 向前删除一个单词
ESC-F 向前移动一个单词
ESC-L 改变本位置后所有单词为小写字母
ESC-N 非递增性向前搜索
ESC-P 非递增性逆向搜索
ESC-R 恢复对该行的所有改变
ESC-T 颠倒两个单词
ESC-U 改变本位置后所有单词为大写字母
ESC-CTRL-E 执行该行上的shell别名、历史和单词扩展
ESC-CTRL-H 向后删除一个单词
ESC-CTRL-Y 在该位置插入前面命令的第一个参数(通常是第二个单词)
ESC-DEL 向后删除一个单词
ESC-^ 执行该行上的历史扩展
ESC-< 移到历史文件的第一行
ESC-> 移到历史文件的最后一行
ESC-. 在该位置插入前面命令行中的最后一个单词
ESC-_ 同上
TAB 对当前单词试图进行文件名完成
ESC-? 列出该位置前文本的可能完成情况
ESC-/ 对当前单词试图进行文件名扩展
ESC-~ 对当前单词试图进行用户名完成
ESC-$ 对当前单词试图进行变量完成
ESC-@ 对当前单词试图进行主机名完成
ESC-! 对当前单词试图进行命令名完成
ESC-TAB 试图进行命令历史中文本的完成
ESC-~ 试图对当前单词进行~扩展
ESC-\ 删除该位置前后所有的TAB和空格
ESC-* 在该位置前插入所有ESC-=生成的所有完成情况
ESC-= 列出该位置前所有可能的完成情况
ESC-{ 试图进行文件名扩展并返回列表到用括号括起来的shell内
**vi控制模式命令
表B-10给出所有vi控制模式命令的完整列表。
表B-10 vi控制模式命令
命令 含义
h 向左移动一个字符
l 向右移动一个字符
w 向右移动一个单词
b 向左移动一个单词
W 移动到下一非空白单词的开头
B 移动到前一非空白单词的开头
e 移动到当前单词的结尾
E 移动到当前非空白单词的结尾
0 移到行首
^ 移到行内第一个非空白字符
$ 移到行尾
i 在当前字符前插入文本
a 在当前字符后插入文本
I 在行首插入文本
A 在行尾插入文本
R 覆盖已有的文本
dh 向后删除一个字符
dl 向前删除一个字符
db 向后删除一个单词
dw 向前删除一个单词
dB 向后删除一个非空白单词
dW 向前删除一个非空白单词
d$ 删除到行尾
d0 删除到行首
D 等价于d$(删除到行尾)
dd 等价于0d$(删除整个行)
C 等价于c$(删除到行尾,进入输入模式)
cc 等价于0c$(删除整个行,进入输入模式)
x 等价于dl(向前删除一个字符)
X 等价于dh(向后删除一个字符)
k或- 向后删除一行
j或+ 向前删除一行
G 移到重复计数指定的行
/string 向前搜索string
?string 向后搜索string
n 重复向前搜索
N 重复向后搜索
fx 向右移到x的下个出现位置
Fx 向左移到x的上个出现位置
tx 向右移到x的下个出现位置,然后回退一个空格
Tx 向左移到x的上个出现位置,然后前移一个空格
; 恢复上个字符查找命令
, 在相反方向上恢复上个字符查找命令
\ 完成文件名
* 进行任意符扩展(在命令行上)
\= 进行任意符扩展(对打印列表)
~ 转换当前字符的大小写
\_ 附加前面命令的最后一个单词,进入输入模式
CTRL-L 启动一新行,在其上刷新当前行
# 给行加上#(注释字符),并将之发送到历史中
学习bash第二版-附录二 参考列表
最新推荐文章于 2023-11-17 14:15:47 发布