Bash 脚本高级指南 | ||
---|---|---|
上一页 |
此索引/词汇表/快速参考列表出了本文中涵盖的许多重要主题。术语以近似 ASCII 排序顺序排列,根据需要进行修改以增强清晰度。
请注意,命令已在第 4 部分中索引。
* * *
^ (插入符号)
~ 波浪号
= 等号
< 左尖括号
小于
重定向
< stdin
<<< Here string
<> 打开文件以进行读写
> 右尖括号
大于
整数比较,在双括号内
重定向
> 将stdout重定向到文件
>> 将stdout重定向到文件,但进行追加
i>&j 将 文件描述符 i重定向到文件描述符j
>&j 将stdout重定向到文件描述符j
>&2 将命令的stdout重定向到stderr
2>&1 将stderr重定向到stdout
&> 将命令的stdout和stderr都重定向到文件
:> file 截断文件为零长度
| 管道,一种将命令输出传递到另一个命令或 shell 的设备
|| 逻辑 OR 测试运算符
- (短划线)
; (分号)
在以下情况下是必需的...
;;& ;& case 选项中的终止符(Bash 版本 4+)。
: 冒号
!= 不等于字符串比较运算符
? (问号)
. (点/句点)
' ... ' (单引号)强引用
" ... " (双引号)弱引用
,
() 圆括号
[ 左方括号,test 结构
[ ] 方括号
[[ ... ]] 双括号,扩展的test 结构
$ 变量名的前缀
$( ... ) 命令替换,使用命令输出设置变量,使用圆括号表示法
$[ ... ] 整数扩展(已弃用)
${ ... } 变量操作/求值
${var} 变量的值
${#var} 变量的长度
${#@}
${#*} 位置参数的数量
${parameter?err_msg} 参数未设置消息
${parameter-default}
${parameter:-default}
${parameter=default}
${parameter:=default} 设置默认参数
${parameter+alt_value}
${parameter:+alt_value}
参数的替代值(如果已设置)
${!var}
变量的间接引用,新表示法
${!#}
${!varprefix*}
${!varprefix@}
匹配所有先前声明的变量的名称,这些变量以varprefix 开头
${string:position}
${string:position:length} 子字符串提取
${var#Pattern}
${var##Pattern} 子字符串删除
${var%Pattern}
${var%%Pattern} 子字符串删除
${string/substring/replacement}
${string//substring/replacement}
${string/#substring/replacement}
${string/%substring/replacement} 子字符串替换
$' ... ' 字符串扩展,使用转义的字符。
\ 转义后面的字符
&
&> 将命令的stdout和stderr都重定向到文件
>&j 将stdout重定向到文件描述符 j
>&2 将命令的stdout重定向到stderr
i>&j 将文件描述符 i 重定向到文件描述符 j
2>&1 将stderr重定向到stdout
n<&- 关闭输入文件描述符 n
0<&-,<&- 关闭stdin
n>&- 关闭输出文件描述符 n
1>&-,>&- 关闭stdout
&& 逻辑 AND 测试运算符
Command & 在后台运行作业
# 井号,特殊符号,表示脚本注释的开始
* 星号
% 百分号
+ 加号
* * *
Shell 变量
$_ 上一个命令的最后一个参数
$? 命令的退出状态
$@ 所有位置参数,作为单独的词
$* 所有位置参数,作为单个词
$$ 脚本的进程 ID
$0 脚本的文件名
$1 传递给脚本的第一个参数
$9 传递给脚本的第九个参数
表 shell 变量
* * * * * *
-a 逻辑 AND 复合比较测试
地址数据库,脚本示例
Bash 脚本高级指南,在哪里下载
删除别名,使用 unalias
And 逻辑运算符 &&
尖括号,转义, \< . . . \> 正则表达式中的词边界
匿名here document,使用 :
比传统数组更有效
连接,示例脚本
declare -a array_name
空数组,空元素,示例脚本
array=( element1 element2 ... elementN)
使用命令替换
将文件加载到数组中
多维,模拟
${#array_name[@]}
${#array_name[*]}
将数组传递给函数
作为函数的 返回值
特殊属性,示例脚本
字符串操作,示例脚本
箭头键,检测
ASCII
awk 面向字段的文本处理语言
* * *
背光,设置亮度
进制转换,示例脚本
基本命令,外部命令
批处理文件,DOS
bc,计算器实用程序
模板,用于计算脚本变量
Bison 实用程序
可引导闪存驱动器,创建
括号,[ ]
括号,花括号,{},用于
break 循环控制命令
参数(可选)
* * *
cat,连cat接文件
逗号运算符,链接命令或操作
command_not_found_handle () 内置错误处理函数(Bash 版本 4+)
注释头,特殊用途
注释掉代码块
复合比较运算符
continue 循环控制命令
cron,调度守护进程
C 风格语法,用于处理变量
花括号 {}
* * *
守护进程,在 UNIX 类型操作系统中
dc,计算器实用程序
dd,数据复制命令
十进制数,Bash 将数字解释为
declare 内置命令
/dev 目录
/dev/null 伪设备文件
/dev/urandom 伪设备文件,使用...生成伪随机数
/dev/zero,伪设备文件
dialog,用于在脚本中生成对话框的实用程序
$DIRSTACK 目录堆栈
禁用的命令,在受限 shell 中
done 关键字,终止循环
DOS 批处理文件,转换为 shell 脚本
DOS 命令,UNIX 等效命令(表格)
点文件,“隐藏”的设置和配置文件
以及 八进制/十六进制常量的求值
双括号 (( ... )) 算术扩展/求值结构
双引号 " ... " 弱引用
* * *
-e 文件存在测试
加密文件,使用 openssl
esac,终止 case 结构的关键字
埃拉托斯特尼筛法,用于生成素数的算法
转义字符,特殊含义
在 $' ... ' 字符串扩展中
/etc/fstab(文件系统挂载)文件
/etc/passwd(用户帐户)文件
$EUID,有效用户 ID
eval,组合和求值表达式,带有变量扩展
退出和退出状态
expr,表达式求值器
? (问号)匹配零个/一个字符
( ... ) 表达式组
\{ N \} “花括号” brackets,转义的,要匹配的字符集数量
+ 字符匹配
* * *
factor,将整数分解为质因数
应用:生成质数
字段,构成数据项的字符组
浮点数,Bash 无法识别
fold,用于包裹文本行的过滤器
派生 子进程
* * *
游戏和娱乐
字谜游戏,再次
getopt,用于解析脚本命令行参数的外部命令
getopts,Bash 内建命令,用于解析脚本命令行参数
全局变量
Globbing,文件名扩展
黄金比例(Phi)
groff,文本标记和格式化语言
$GROUPS,用户所属的用户组
gzip,压缩实用程序
* * *
哈希,在表中创建查找键
head,echo 到stdout文本文件开头的行
匿名 here 文档,使用 :
注释掉 代码块
自文档化 脚本
函数,为其提供输入
计算 黄金比例
关闭 limit 字符串 不得缩进
Limit 字符串的 Dash 选项,<<-LimitString
字面文本输出,用于生成程序代码
禁用 参数替换
$HOME,用户的主目录
$HOSTNAME,系统主机名
* * *
$Id 参数,在 rcs (版本控制系统) 中
if [ condition ]; then ... test 结构
$IFS,内部字段分隔符 变量
in,关键字 前导[list]在 for 循环中
初始化表, /etc/inittab
内联组,即代码块
交互式脚本,测试
iptables,数据包过滤和防火墙实用程序
* * *
作业 ID,表格
* * *
错误,如果缺少
选项 (-l, -9)
killall,按名称终止进程
killall 脚本 在/etc/rc.d/init.d
* * *
lastpipe shell 选项
let,设置和执行变量的算术运算
C 风格 递增和递减运算符
$LINENO,指示它在脚本中出现的行号的变量
链接,文件(使用 ln 命令)
使用多个名称调用脚本,使用 ln
符号链接,ln -s
和 递归
逻辑运算符 (&&, ||,等等)
注销文件,即~/.bash_logout文件
break 循环控制命令
continue 循环控制命令
C 风格循环,在 双括号 内
do (关键字),开始执行循环内的命令
done (关键字),终止循环
for arg in [list]; do
in,(关键字)在 for 循环中位于 [list] 之前
在后台运行循环,脚本示例
需要分号,当 do 在循环的第一行时
until 循环
until [ condition-is-true ]; do
while 循环
while [ condition ]; do
函数调用 在测试括号内
while read 结构
回环设备
* * *
m4,宏处理语言
$MACHTYPE,机器类型
魔数,文件头部的标记,指示文件类型
Makefile,包含 make 命令使用的依赖项列表的文件
man,手册页(查找)
手册页编辑器(脚本)
mapfile 内建命令,将文本文件加载到数组中
摩尔斯电码训练 脚本
取模,算术余数运算符
应用:生成质数
抵押贷款计算,示例脚本
* * *
-n 字符串非 空 测试
命名管道,一个临时的 FIFO 缓冲区
nc,netcat,用于 TCP 和 UDP 端口的网络工具包
netstat,网络统计信息
nl,用于为文本行编号的过滤器
Noclobber, -CBash 选项,用于防止文件被覆盖
空 变量赋值,避免
* * *
-o 逻辑 OR 复合比较测试
代码混淆
冒号 作为函数名
八进制,以 8 为基数的数字
od,八进制转储
$OLDPWD 上一个工作目录
openssl 加密实用程序
运算符
Or 逻辑运算符,||
* * *
${parameter+alt_value}
${parameter:+alt_value}
参数的替代值(如果已设置)
${parameter-default}
${parameter:-default}
${parameter=default}
${parameter:=default}
${!varprefix*}
${!varprefix@}
${parameter?err_msg}
${parameter}
表 参数替换
圆括号
$PATH,路径(系统二进制文件的位置)
将目录附加到$PATH 使用+=运算符.
路径名,一个文件名包含给定文件的完整 路径。
Perl,编程语言
Perquackey 类型字谜游戏(Quackey 脚本)
PID,进程 ID,分配给正在运行的进程的标识号。
管道,| ,一种将命令的输出传递给另一个命令或 shell 的设备
$PIPESTATUS,上次执行的管道的退出状态
将命令的输出通过管道传递 到脚本
#!/bin/sh 脚本头禁用 扩展的 Bash 功能
CGI 编程,使用脚本进行
关闭 here 文档 中的 limit 字符串,缩进
DOS 类型换行符 (\r\n) 使脚本崩溃
eval,使用风险
退出状态,异常
Export 问题,子进程 到 父进程
扩展的 Bash 功能 不可用
GNU 命令集,在跨平台脚本中
let 误用:尝试设置字符串变量
多个 echo 语句 在 输出被捕获的函数 中
数值和字符串比较运算符 不 等效
= 和 -eq 不 可互换
管道
echo 到 read(但是,这个问题 可以规避)
保留变量中的 空白字符,意外后果
未文档化的 Bash 功能,危险性
Bash 的更新 破坏旧脚本
变量名,不恰当的
子 shell 中的变量,作用域 受限
空白字符,误用
指针
一个 测试套件 脚本 (Bash 与经典 Bourne shell)
POSIX,可移植操作系统接口 / UNIX
$PPID,父进程的 进程 ID
优先级,运算符
前置 文件头部的行,脚本示例
质数
生成质数 使用 factor 命令
生成质数 使用 取模 运算符
埃拉托斯特尼筛法,示例脚本
printf,格式化打印 命令
/proc 目录
正在运行的进程,描述文件
可编程补全(tab 扩展)
提示符
伪代码,作为解决问题的方法
$PWD,当前工作目录
* * *
Quackey,一个 Perquackey 类型字谜游戏(脚本)
问号,?
* * *
随机数
Raspberry Pi(单板计算机)
将 cat 的输出通过管道传递 到 read
将 echo 通过管道传递 到 read 的问题
从文件重定向 到 read
$REPLY,默认 read 变量
while read 结构
readline 库
重定向
重新分配 文件描述符
打开一个文件 用于同时读取和写入
<>filename
2>&1
stdin / stdout,使用 -
> ... >>
>&j
i>&j
命令的 stdout 到stderr
>&2
&>
^ (脱字符) 行首
$ (美元符号) 锚点
. (点号) 匹配单个字符
* (星号) 任意数量的字符
[ ] (方括号) 封闭要匹配的字符集
\ (反斜杠) 转义,字面解释后续字符
\< ... \> (尖括号,转义的) 单词边界
扩展 正则表达式
+ 字符匹配
\{ \} 转义的 “花括号” brackets
[: :] POSIX 字符类
受限 shell,shell(或脚本),其中某些命令被禁用
按顺序运行脚本,无需用户干预
* * *
变量的作用域,定义
脚本选项,在命令行设置
辅助提示符,$PS2
nmap,网络映射器 / 端口扫描器
sed,基于模式的编程语言
select,用于菜单构建的结构
set,更改内部脚本变量的值
set -u,如果尝试使用 未声明 的变量,则中止脚本并显示错误消息。
Shell 脚本,定义
Shell 包装器,嵌入命令或实用程序的脚本
shift,重新分配 位置参数
$SHLVL,shell 级别,shell(或脚本)嵌套的深度
shopt,更改 shell 选项
信号,发送给进程的消息
模拟
Socket,与 I/O 端口关联的通信节点
排序
source,执行脚本,或在脚本中导入文件
垃圾邮件,处理
栈
标准差,示例脚本
启动文件,Bash
秒表,示例脚本
字符串
=~ 字符串匹配运算符
${#string}
空 字符串,测试
保护字符串 免受扩展和/或重新解释,脚本示例
取消保护 字符串,脚本示例
strchr(),等价于
strlen(),等价于
strings 命令,在二进制文件或数据文件中查找可打印字符串
子字符串提取
子字符串 索引(字符串中的数字位置)
子字符串替换
${string/substring/replacement}
${string//substring/replacement}
${string/#substring/replacement}
表 字符串/子字符串 操作和提取运算符
强 引用 ' ... '
su Substitute user,以其他用户或 root 身份登录
suid (set user id) 文件标志
suid 命令在脚本内部,不建议使用
* * *
表格查找,脚本示例
tail, echo 到stdout文本文件末尾 (tail) 的行
tar,归档实用程序
test 命令
外部命令, /usr/bin/test(等效于/usr/bin/[)
测试运算符
-a 逻辑 AND 复合比较
-e 文件存在
-eq 等于 (整数比较)
-f 文件是普通文件
-ge 大于或等于 (整数比较)
-gt 大于 (整数比较)
-le 小于或等于 (整数比较)
-lt 小于 (整数比较)
-n 非零长度 (字符串比较)
-ne 不等于 (整数比较)
-o 逻辑 OR 复合比较
-u suid 标志已设置,文件测试
-z 零长度 (字符串比较)
= 等于 (字符串比较)
== 等于 (字符串比较)
< 小于 (字符串比较)
<= 小于或等于,(整数比较,在 double parentheses 内)
> 大于 (字符串比较)
> 大于,(整数比较,在 double parentheses 内)
>= 大于或等于,(整数比较,在 double parentheses 内)
|| 逻辑 OR
&& 逻辑 AND
!= 不等于 (字符串比较)
表格 test 运算符
定时输入
数组,作为函数的返回值
关联数组 比数字索引数组 更有效率
捕获函数的返回值,使用 echo
CGI 编程,使用脚本进行
注释块
使用 if-then 结构
注释头,特殊用途
C 风格语法 ,用于操作变量
以破折号为前缀的文件名,删除
过滤器,将输出反馈到相同过滤器
函数 return 值解决方法
库 有用的定义和函数
空 变量赋值,避免
将数组传递给函数
$PATH,追加到,使用 += 运算符。
前置 文件头部的行
进度条 模板
将 test 重定向到 /dev/null 以抑制输出
脚本作为嵌入命令
脚本可移植性
将脚本变量设置为 嵌入式 sed 或 awk 代码块
通过禁用 unicode 加速脚本执行
子 shell 变量,在子 shell 外部访问
测试变量 以查看它是否仅包含数字
Widgets,从脚本调用
$TMOUT,超时间隔
tput,终端控制命令
tr,字符转换过滤器
三元 (ternary) 运算符,C 风格,var>10?88:99
typeset 内建命令
* * *
$UID,用户 ID 号
uname,输出系统信息
Unicode,用于表示字母和符号的编码标准
禁用 unicode 以优化脚本
uniq,从排序文件中删除重复行的过滤器
unset,删除 shell 变量
until 循环
until [ condition-is-true ]; do
* * *
变量
sed 或 awk 代码块,将变量设置为
C-style 递增/递减/三元运算
declare,修改变量的属性
扩展 / 子字符串替换 运算符
eval variable1=\$$variable2
${!variable}
整数 / 字符串 (变量是无类型的)
${#var}
变量名 和 变量值,区分
空 字符串,测试
空 变量赋值,避免
在 子shell 中 对父 shell 不可见
测试变量 是否仅包含数字
类型化,限制变量的属性
未声明,错误消息
未加引号的变量,splitting
* * *
wait,暂停脚本执行
弱 引号 " ... "
while 循环
while [ condition ]; do
Whitespace,空格、制表符和换行符
who,有关已登录用户的信息
单词分割
Wrapper,shell
* * *
xargs,用于分组参数的过滤器
一次 处理一个 参数
Whitespace,处理
* * *
* * *
-z 字符串是 null