news 2026/2/22 13:08:36

50、Bash编程实用参考与示例详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
50、Bash编程实用参考与示例详解

Bash编程实用参考与示例详解

在Bash编程中,有许多实用的功能和工具可以提高我们的工作效率。下面我们将详细介绍一些重要的内容,包括字符类、扩展模式匹配运算符、转义序列、Readline配置以及Bash自带的示例。

1. POSIX字符类

POSIX字符类可以在[]中使用,例如[[:alnum:]]。以下是一些常用的POSIX字符类:
-[[:alnum:]]:字母和数字
-[[:alpha:]]:字母
-[[:ascii:]]:ASCII字符
-[[:blank:]]:空格和制表符
-[[:cntrl:]]:控制字符
-[[:digit:]]:数字
-[[:graph:]]:可打印的非空白字符
-[[:lower:]]:小写字母
-[[:print:]]:可打印字符
-[[:punct:]]:标点符号
-[[:space:]]:空白字符
-[[:upper:]]:大写字母
-[[:word:]]:字母、数字和下划线
-[[:xdigit:]]:十六进制数字

此外,[=c=]匹配所有与字符c具有相同排序权重(由当前区域设置定义)的字符,而[.symbol.]匹配排序符号symbol。这些字符类受区域设置的影响。若要使用传统的Unix值,可以使用LC_COLLATE=CLC_ALL=C

2. extglob扩展模式匹配运算符

当使用shopt -s extglob时,可以使用以下扩展模式匹配运算符。匹配默认是区分大小写的,但可以使用shopt -s nocasematch(bash 3.1+)来改变这一行为。该选项会影响case[[命令。

分组含义
@( ... )仅出现一次
*( ... )零次或多次出现
+( ... )一次或多次出现
?( ... )零次或一次出现
!( ... )除这些之外的任何情况
3. tr转义序列

tr命令中的转义序列有特定的含义,如下表所示:

序列含义
\ooo八进制值为ooo(1 - 3个八进制数字)的字符
\\反斜杠字符(即对反斜杠本身进行转义)
\a“可听”铃声,ASCII BEL字符(因为“b”已用于退格)
\b退格
\f换页
\n换行
\r回车
\t制表符(有时称为水平制表符)
\v垂直制表符
4. Readline初始化文件语法

GNU Readline库为我们提供了与bash和其他GNU实用程序进行交互的命令行。它具有强大的可配置性,但很多人可能并不了解。我们可以通过在初始化文件中使用set命令来修改Readline的运行时行为,语法如下:

set variable value

例如,将默认的类似Emacs的键绑定更改为使用vi行编辑命令:

set editing-mode vi

变量名和值在适当的情况下不区分大小写,未识别的变量名会被忽略。布尔变量(可以设置为onoff)在值为空、on(不区分大小写)或1时设置为on,其他值则设置为off

以下是一些常见的Readline配置设置:

变量描述
bell-style控制Readline想要响铃时的行为。设置为none时,Readline从不响铃;设置为visible时,若有可见铃声则使用;设置为audible(默认)时,尝试响铃。
bind-tty-special-chars设置为on时,Readline尝试将内核终端驱动特殊处理的控制字符绑定到其Readline等效字符。
comment-begin执行插入注释命令时在行首插入的字符串,默认值为#
completion-ignore-case设置为on时,Readline进行文件名匹配和补全时不区分大小写,默认值为off
completion-query-items确定何时询问用户是否显示可能补全列表的可能补全数量。若可能补全数量大于此值,Readline会询问用户是否查看;否则直接列出。该变量必须设置为大于或等于0的整数值,负值表示Readline永远不询问,默认限制为100。
convert-meta设置为on时,Readline会将设置了第八位的字符转换为ASCII键序列,通过去除第八位并添加Esc字符前缀,将其转换为带有元前缀的键序列,默认值为on
disable-completion设置为on时,Readline会禁止单词补全,补全字符会像映射到自插入一样插入到行中,默认值为off
editing-mode控制使用的默认键绑定集。默认情况下,Readline以Emacs编辑模式启动,其中按键操作与Emacs最相似。该变量可以设置为emacsvi
enable-keypad设置为on时,Readline在被调用时会尝试启用应用程序小键盘,某些系统需要此设置才能启用箭头键,默认值为off
expand-tilde设置为on时,Readline尝试单词补全时会执行波浪号(~)扩展,默认值为off
history-preserve-point设置为on时,历史记录代码会尝试将光标位置(当前光标所在位置)放置在通过previous-historynext-history检索的每个历史记录行的相同位置,默认值为off
horizontal-scroll-mode该变量可以设置为onoff。设置为on时,当编辑的行比屏幕宽度长时,文本将在单个屏幕行上水平滚动,而不是换行到新的屏幕行,默认值为off
input-meta设置为on时,Readline将启用八位输入(它不会清除读取字符中的第八位),无论终端声称它支持什么,默认值为offmeta-flag是此变量的同义词。
isearch-terminators应终止增量搜索而不随后将字符作为命令执行的字符字符串。如果此变量未赋值,EscC-J会终止增量搜索。
keymap设置Readline用于键绑定命令的当前键盘映射。可接受的键盘映射名称有emacsemacs-standardemacs-metaemacs-ctlxvivi-movevi-commandvi-insertvi等同于vi-commandemacs等同于emacs-standard。默认值为emacsediting-mode变量的值也会影响默认键盘映射。
mark-directories设置为on时,补全的目录名会追加斜杠,默认值为on
mark-modified-lines设置为on时,Readline会在已修改的历史记录行开头显示星号(*),默认值为off
mark-symlinked-directories设置为on时,补全的符号链接到目录的名称会追加斜杠(受mark-directories值的影响),默认值为off
match-hidden-files设置为on时,Readline在执行文件名补全时会匹配以.开头的文件(隐藏文件),除非用户在要补全的文件名中提供了前导.,默认值为on
output-meta设置为on时,Readline将直接显示设置了第八位的字符,而不是作为带有元前缀的转义序列,默认值为off
page-completions设置为on时,Readline使用内部类似more的分页器一次显示一屏幕的可能补全,默认值为on
print-completions-horizontally设置为on时,Readline将按字母顺序水平排序显示补全结果,而不是垂直显示,默认值为off
show-all-if-ambiguous改变补全函数的默认行为。设置为on时,有多个可能补全的单词会立即列出匹配项,而不是响铃,默认值为off
show-all-if-unmodified以类似于show-all-if-ambiguous的方式改变补全函数的默认行为。设置为on时,没有可能的部分补全(可能的补全没有共同前缀)的多个可能补全的单词会立即列出匹配项,而不是响铃,默认值为off
visible-stats设置为on时,列出可能补全时会在文件名后追加表示文件类型的字符,默认值为off
5. Emacs模式命令

在Readline的Emacs编辑模式下,有许多实用的命令,如下表所示:

命令含义
Ctrl-A移动到行首
Ctrl-B向后移动一个字符
Ctrl-D向前删除一个字符
Ctrl-E移动到行尾
Ctrl-F向前移动一个字符
Ctrl-G中止当前编辑命令并响铃
Ctrl-J等同于回车
Ctrl-K向前删除(剪切)到行尾
Ctrl-L清屏并重新显示当前行
Ctrl-M等同于回车
Ctrl-N命令历史记录中的下一行
Ctrl-O等同于回车,然后显示历史记录文件中的下一行
Ctrl-P命令历史记录中的上一行
Ctrl-R向后搜索
Ctrl-S向前搜索
Ctrl-T交换两个字符的位置
Ctrl-U从光标位置向后删除到行首
Ctrl-V使下一个输入的字符按字面意思处理
Ctrl-V 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恢复(粘贴)最后删除的项
Delete向后删除一个字符
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-Delete向后删除一个单词
Esc-^对当前行执行历史记录扩展
Esc-<移动到历史记录文件的第一行
Esc->移动到历史记录文件的最后一行
Esc-.在光标位置插入上一个命令行的最后一个单词
Esc-_等同于Esc-.
Tab尝试对当前单词进行文件名补全
Esc-?列出光标前文本的可能补全
Esc-/尝试对当前单词进行文件名补全
Esc-~尝试对当前单词进行用户名补全
Esc-$尝试对当前单词进行变量补全
Esc-@尝试对当前单词进行主机名补全
Esc-!尝试对当前单词进行命令名补全
Esc-Tab尝试从命令历史记录中的文本进行补全
Esc-~尝试对当前单词进行波浪号扩展
Esc-\删除光标周围的所有空格和制表符
Esc-*在光标前插入Esc-=会生成的所有补全项
Esc-=列出光标前的可能补全
Esc-{尝试对当前单词进行文件名补全,并将结果以大括号括起来返回给shell
6. vi控制模式命令

在Readline的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开始新行并在其上重绘当前行
#在行首添加#(注释字符)并将其发送到历史记录
7. ASCII值表

ASCII表在处理字符和转义序列时非常有用,以下是部分ASCII值表:

IntOctalHexASCII
000000^@
100101^A
200202^B
300303^C
400404^D
500505^E
600606^F
700707^G
801008^H
901109^I
100120a^J
110130b^K
120140c^L
130150d^M
140160e^N
150170f^O
1602010^P
1702111^Q
1802212^R
1902313^S
2002414^T
2102515^U
2202616^V
2302717^W
2403018^X
2503119^Y
260321a^Z
270331b^[
280341c^\
290351d^]
300361e^^
310371f^_
3204020
3304121!
3404222"
3504323#
3604424$
3704525%
3804626&
3904727
4005028(
4105129)
420522a*
430532b+
440542c,
450552d-
460562e.
470572f/
48060300
49061311
50062322
51063333
52064344
53065355
54066366
55067377
56070388
57071399
580723a:
590733b;
600743c<
610753d=
620763e>
630773f?
6410040@
6510141A
6610242B
6710343C
6810444D
6910545E
7010646F
7110747G
7211048H
7311149I
741124aJ
751134bK
761144cL
771154dM
781164eN
791174fO
8012050P
8112151Q
8212252R
8312353S
8412454T
8512555U
8612656V
8712757W
8813058X
8913159Y
901325aZ
911335b[
921345c\
931355d]
941365e^
951375f_
9614060`
9714161a
9814262b
9914363c
10014464d
10114565e
10214666f
10314767g
10415068h
10515169i
1061526aj
1071536bk
1081546cl
1091556dm
1101566en
1111576fo
11216070p
11316171q
11416272r
11516373s
11616474t
11716575u
11816676v
11916777w
12017078x
12117179y
1221727az
1231737b{
1241747c|
1251757d}
1261767e~
1271777f^?

Bash编程实用参考与示例详解

8. Bash自带示例

Bash的压缩包归档中包含一个examples目录,非常值得探索。该目录包含示例代码、脚本、函数和启动文件。

8.1 启动文件目录示例
  • startup - files目录:提供了许多可用于自定义启动文件的示例。其中,bash_aliases包含很多有用的别名。不过要注意,如果直接复制这些文件,需要根据自己的系统进行编辑,因为很多路径可能不同。
  • functions目录:包含许多实用的函数定义,例如:
    • basename:一些系统中缺失的basename实用程序的实现。
    • dirfuncs:目录操作功能。
    • dirname:一些系统中缺失的dirname实用程序的实现。
    • whatis:第十版Bourne shellwhatis内置命令的实现。
    • whence:Korn shellwhence内置命令的近似克隆。
    • 对于有Korn shell使用经验的人来说,kshenv可能特别有用,它包含了一些常见Korn功能(如whenceprint和双参数cd内置命令)的函数定义。
  • scripts目录:包含许多Bash脚本示例。其中两个较大的脚本展示了使用shell脚本可以实现的复杂功能,一个是(相当有趣的)冒险游戏解释器,另一个是C shell解释器。其他脚本包括优先级规则示例、滚动文本显示、“旋转轮”进度显示以及如何提示用户输入特定类型的答案等。

以下是bash 3.1及更高版本中相关路径和描述的索引表:
| Path | Description | X - ref |
| ---- | ---- | ---- |
|./bashdb| 已弃用的bash调试器示例实现 | |
|./complete| shell补全代码 | |
|./functions| 示例函数 | |
|./functions/array - stuff| 各种数组函数(如ashiftarray_sortreverse) | |
|./functions/array - to - string| 将数组转换为字符串 | |
|./functions/autoload| 几乎与ksh兼容的autoload(无懒加载) | ksh |
|./functions/autoload.v2| 几乎与ksh兼容的autoload(无懒加载) | ksh |
|./functions/autoload.v3| 更与ksh兼容的autoload(有懒加载) | ksh |
|./functions/basename|basename(1)的替代实现 | basename |
|./functions/basename2| 用于bash/sh的快速basename(1)dirname(1)函数 | basename, dirname |
|./functions/coproc.bash| 启动、控制和结束协进程 | |
|./functions/coshell.bash| 控制shell协进程(参见coproc.bash) | |
|./functions/coshell.README|coshellcoproc的README文件 | |
|./functions/csh - compat| C - shell兼容性包 | csh |
|./functions/dirfuncs| 《The Korn Shell》一书中的目录操作函数 | |
|./functions/dirname|dirname(1)的替代实现 | dirname |
|./functions/emptydir| 确定目录是否为空 | |
|./functions/exitstat| 显示进程的退出状态 | |
|./functions/external| 类似于command,但强制使用外部命令 | |
|./functions/fact| 递归阶乘函数 | |
|./functions/fstty| 同步TERM更改到stty(1)和readlinebind的前端 | stty.bash |
|./functions/func| 打印参数指定的函数定义 | |
|./functions/gethtml| 从远程服务器获取网页(bash版的wget(1)) | |
|./functions/getoptx.bash| 解析长选项的getopt函数 | |
|./functions/inetaddr| 互联网地址转换(inet2hexhex2inet) | |
|./functions/inpath| 如果参数在PATH中且可执行,则返回零 | inpath |
|./functions/isnum.bash| 测试用户输入是数字还是字符值 | |
|./functions/isnum2| 测试用户输入的数值,包括浮点数 | |
|./functions/isvalidip| 测试用户输入的是否为有效的IP地址 | |
|./functions/jdate.bash| 儒略日期转换 | |
|./functions/jj.bash| 查找正在运行的作业 | |
|./functions/keep| 尝试将某些程序保持在前台并运行 | |
|./functions/ksh - cd| 类似ksh的cdcd [-LP] [dir [change]]| ksh |
|./functions/ksh - compat - test| 类似ksh的算术测试替代方案 | ksh |
|./functions/kshenv| 为bash提供ksh环境基础的函数和别名 | ksh |
|./functions/login| 替换旧Bourne shell中的loginnewgrp内置命令 | |
|./functions/lowercase| 将文件名重命名为小写 | rename lower |
|./functions/manpage| 查找并打印手册页 | fman |
|./functions/mhfold| 打印MH文件夹,仅在folders(1)不打印修改日期/时间时有用 | |
|./functions/notify.bash| 作业状态改变时通知 | |
|./functions/pathfuncs| 与路径相关的函数(如no_pathadd_pathpre - pathdel_path) | path |
|./functions/README| README文件 | |
|./functions/recurse| 递归目录遍历器 | |
|./functions/repeat2| C shell内置repeat的克隆 | repeat, csh |
|./functions/repeat3| C shell内置repeat的克隆 | repeat, csh |
|./functions/seq| 生成从m到n的序列;m默认为1 | |
|./functions/seq2| 生成从m到n的序列;m默认为1 | |
|./functions/shcat| 基于readline的分页器 | cat, readline pager |
|./functions/shcat2| 基于readline的分页器 | cat, readline pager |
|./functions/sort - pos - params| 对位置参数进行排序 | |
|./functions/substr| 模拟古老ksh内置命令的函数 | ksh |
|./functions/substr2| 模拟古老ksh内置命令的函数 | ksh |
|./functions/term| 交互式或非交互式设置终端类型的shell函数 | |
|./functions/whatis| 第十版Unix sh内置whatis(1)命令的实现 | |
|./functions/whence| 几乎与ksh兼容的whence(1)命令 | |
|./functions/which| 模仿FreeBSD中的which(1)| |
|./functions/xalias.bash| 将csh别名命令转换为bash函数 | csh, aliasconv |
|./functions/xfind.bash|find(1)的克隆 | |
|./loadables/| 示例可加载替换模块 | |
|./loadables/basename.c| 返回路径名的非目录部分 | basename |
|./loadables/cat.c| 无选项的cat(1)替换实现——这是cat原本的意图 | cat, readline pager |
|./loadables/cut.c|cut(1)的替换实现 | |
|./loadables/dirname.c| 返回路径名的目录部分 | dirname |
|./loadables/finfo.c| 打印文件信息 | |
|./loadables/getconf.c| POSIX.2getconf实用程序 | |
|./loadables/getconf.h| 系统未提供的替换定义 | |
|./loadables/head.c| 复制文件的开头部分 | |
|./loadables/hello.c| 必备的“Hello World”/示例可加载模块 | |
|./loadables/id.c| POSIX.2用户身份 | |
|./loadables/ln.c| 创建链接 | |
|./loadables/logname.c| 打印当前用户的登录名 | |
|./loadables/Makefile.in| 示例可加载内置命令的简单makefile | |
|./loadables/mkdir.c| 创建目录 | |
|./loadables/necho.c| 无选项或参数解释的echo| |
|./loadables/pathchk.c| 检查路径名的有效性和可移植性 | |
|./loadables/print.c| 可加载的ksh - 93风格print内置命令 | |
|./loadables/printenv.c| BSDprintenv(1)的最小内置克隆 | |
|./loadables/push.c| 有人记得TOPS - 20吗? | |
|./loadables/README| README文件 | |
|./loadables/realpath.c| 规范化路径名,解析符号链接 | |
|./loadables/rmdir.c| 删除目录 | |
|./loadables/sleep.c| 睡眠几分之一秒 | |
|./loadables/strftime.c| 可加载的strftime(3)内置接口 | |
|./loadables/sync.c| 通过强制挂起的文件系统写入完成来同步磁盘 | |
|./loadables/tee.c| 复制标准输入 | |
|./loadables/template.c| 可加载内置命令的示例模板 | |
|./loadables/truefalse.c| 真和假内置命令 | |
|./loadables/tty.c| 返回终端名称 | |
|./loadables/uname.c| 打印系统信息 | |
|./loadables/unlink.c| 删除目录项 | |
|./loadables/whoami.c| 打印当前用户的用户名 | |
|./loadables/perl/| 演示如何将Perl解释器集成到bash中 | |
|./misc| 杂项 | |
|./misc/aliasconv.bash| 将csh别名转换为bash别名和函数 | csh, xalias |
|./misc/aliasconv.sh| 将csh别名转换为bash别名和函数 | csh, xalias |
|./misc/cshtobash| 将csh别名、环境变量和变量转换为bash等效项 | csh, xalias |
|./misc/README| README文件 | |
|./misc/suncmd.termcap| SunView TERMCAP字符串 | |
|./obashdb| Bill Rosenblatt的《Learning the Korn Shell》中Korn Shell调试器的修改版本 | |
|./scripts.noah| Noah Friedman的脚本集合(由Chet Ramey更新为bash v2语法) | |
|./scripts.noah/aref.bash| 伪数组和子字符串索引示例 | |
|./scripts.noah/bash.sub.bash|require.bash使用的库函数 | |
|./scripts.noah/bash_version.| bash | 一个分割$BASH_VERSION的函数 | |
|./scripts.noah/meta.bash| 启用和禁用八位readline输入 | |
|./scripts.noah/mktmp.bash| 创建具有唯一名称的临时文件 | |
|./scripts.noah/number.bash| 一个有趣的将数字转换为英语的技巧 | |
|./scripts.noah/PERMISSION| 使用此目录中脚本的权限 | |
|./scripts.noah/prompt.bash| 将PS1设置为预定义字符串的方法 | |
|./scripts.noah/README| README文件 | |
|./scripts.noah/remap_keys.| bash | 重新进行readline绑定的前端 | readline |
|./scripts.noah/require.bash| bash的类似Lisp的require/provide库函数 | |
|./scripts.noah/send_mail.| bash | 用bash编写的替代SMTP客户端 | |
|./scripts.noah/shcat.bash| bash版的cat(1)替换实现 | cat |
|./scripts.noah/source.bash| 使用当前目录的source替换实现 | |
|./scripts.noah/string.bash| shell级别的string(3)函数 | |
|./scripts.noah/stty.bash| 更改readline绑定的stty(1)前端 | fstty |
|./scripts.noah/y_or_n_p.| bash | 提示用户输入是/否/退出答案 | ask |
|./scripts.v2| John DuBois的ksh脚本集合(由Chet Ramey转换为bash v2语法) | |
|./scripts.v2/arc2tarz| 将arc归档转换为压缩的tar归档 | |
|./scripts.v2/bashrand| 具有上下限和可选种子的随机数生成器 | random |
|./scripts.v2/cal2day.bash| 将日期编号转换为名称 | |
|./scripts.v2/cdhist.bash| 带有目录栈的cd替换实现 | |
|./scripts.v2/corename| 确定核心文件的生成原因 | |
|./scripts.v2/fman| 快速的man(1)替换实现 | manpage |
|./scripts.v2/frcp| 使用ftp(1)复制文件,但使用rcp类型的命令行语法 | |
|./scripts.v2/lowercase| 将文件名更改为小写 | rename lower |
|./scripts.v2/ncp|cp(1)的更好前端(具有-i等选项) | |
|./scripts.v2/newext| 更改一组文件的扩展名 | rename |
|./scripts.v2/nmv|mv(1)的更好前端(具有-i等选项) | rename |
|./scripts.v2/pages| 打印文件的指定页面 | |
|./scripts.v2/PERMISSION| 使用此目录中脚本的权限 | |
|./scripts.v2/pf| 处理压缩文件的分页器前端 | |
|./scripts.v2/pmtop| SunOS 4.x和BSD/OS的简易top(1)| |
|./scripts.v2/README| README文件 | |
|./scripts.v2/ren| 通过更改匹配模式的文件名部分来重命名文件 | rename |
|./scripts.v2/rename| 更改匹配模式的文件名 | rename |
|./scripts.v2/repeat| 多次执行命令 | repeat |
|./scripts.v2/shprof| bash脚本的行分析器 | |
|./scripts.v2/untar| 将(可能压缩的)tar文件解压缩到目录中 | |
|./scripts.v2/uudec| 小心地对多个文件进行uudecode(1)| |
|./scripts.v2/uuenc| 对多个文件进行uuencode(1)| |
|./scripts.v2/vtree| 打印目录树的可视化显示 | tree |
|./scripts.v2/where| 显示匹配模式的命令所在位置 | |
|./scripts| 示例脚本 | |
|./scripts/adventure.sh| bash编写的文本冒险游戏! | |
|./scripts/bcsh.sh| Bourne shell的C shell解释器 | csh |
|./scripts/cat.sh| 基于readline的分页器 | cat, readline pager |
|./scripts/center| 居中一组行 | |
|./scripts/dd - ex.sh| 仅使用/bin/sh/bin/dd/bin/rm的行编辑器 | |
|./scripts/fixfiles.bash| 递归遍历树并修复包含各种坏字符的文件 | |
|./scripts/hanoi.bash| 不可避免的bash版汉诺塔问题 | |
|./scripts/inpath| 在$PATH中搜索与$1同名的文件;如果找到则返回TRUE | inpath |
|./scripts/krand.bash| 生成整数范围内的随机数 | random |
|./scripts/line - input.bash| GNU Bourne Again Shell的行输入例程和终端控制原语 | |
|./scripts/nohup.bash| bash版的nohup命令 | |
|./scripts/precedence| 测试&&||运算符的相对优先级 | |
|./scripts/randomcard.bash| 从一副牌中打印一张随机牌 | random |
|./scripts/README| README文件 | |
|./scripts/scrollbar| 显示滚动文本 | |
|./scripts/scrollbar2| 显示滚动文本 | |
|./scripts/self - repro| 自我复制脚本(小心使用) | |
|./scripts/showperm.bash| 将ls(1)的符号权限转换为八进制模式 | |
|./scripts/shprompt| 显示提示并获取满足特定条件的答案 | ask |
|./scripts/spin.bash| 显示旋转轮以显示进度 | |
|./scripts/timeout| 为rsh(1)设置更短的超时时间 | |
|./scripts/vtree2| 显示目录的树状打印,包含1k块的磁盘使用情况 | tree |
|./scripts/vtree3| 显示目录的图形化树状打印 | tree |
|./scripts/vtree3a| 显示目录的图形化树状打印 | tree |
|./scripts/websrv.sh| bash编写的Web服务器! | |
|./scripts/xterm_title| 打印xterm标题栏的内容 | |
|./scripts/zprintf| 模拟printf(自printf成为bash内置命令后已过时) | |
|./startup - files| 示例启动文件 | |
|./startup - files/Bash_aliases| 一些有用的别名(由Fox编写) | |
|./startup - files/Bash_profile| bash登录shell的示例启动文件(由Fox编写) | |
|./startup - files/bash - profile| bash登录shell的示例启动文件(由Ramey编写) | |
|./startup - files/bashrc| 示例Bourne Again Shell初始化文件(由Ramey编写) | |
|./startup - files/Bashrc.bfox| 示例Bourne Again Shell初始化文件(由Fox编写) | |
|./startup - files/README| README文件 | |
|./startup - files/apple| Mac OS X的示例启动文件 | |
|./startup - files/apple/aliases| Mac OS X的示例别名 | |
|./startup - files/apple/bash.| defaults | 示例用户首选项文件 | |
|./startup - files/apple/| environment | 示例Bourne Again Shell环境文件 | |
|./startup - files/apple/login| 示例登录包装器 | |
|./startup - files/apple/logout| 示例注销包装器 | |
|./startup - files/apple/rc| 示例Bourne Again Shell配置文件 | |
|./startup - files/apple/README| README文件 | |

这些示例不仅可以直接包含在你的环境中,还能为你提供许多可供学习的替代示例。建议你对它们进行实验,以更好地掌握Bash编程。

通过上述介绍,我们详细了解了Bash编程中的字符类、扩展模式匹配运算符、转义序列、Readline配置以及Bash自带的示例等重要内容。这些知识和工具将有助于你更高效地进行Bash编程,提升工作效率。希望你能在实际应用中充分利用这些信息,编写出更加优秀的Bash脚本。

下面是一个简单的mermaid流程图,展示了使用Bash示例脚本的基本流程:

graph LR A[选择示例类型] --> B{脚本或函数} B -->|脚本| C[选择脚本] B -->|函数| D[选择函数] C --> E[编辑脚本以适应系统] D --> F[加载函数到环境] E --> G[执行脚本] F --> H[使用函数]

这个流程图展示了从选择示例类型(脚本或函数),到根据选择进行相应操作(编辑脚本、加载函数),最后执行脚本或使用函数的过程。你可以根据自己的需求,按照这个流程来使用Bash自带的示例。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/17 10:20:52

51、命令行处理与版本控制全解析

命令行处理与版本控制全解析命令行处理在使用shell时&#xff0c;命令行处理是一个核心环节&#xff0c;它涉及多个步骤&#xff0c;理解这些步骤对于成为shell脚本编写专家或解决复杂问题至关重要。命令行处理步骤每一行从标准输入&#xff08;STDIN&#xff09;或脚本中读取的…

作者头像 李华
网站建设 2026/2/17 4:30:00

52、版本控制工具综合指南

版本控制工具综合指南 1. 版本控制概述 版本控制在软件开发和文档管理中至关重要&#xff0c;它能帮助我们跟踪文件的变化、恢复到旧版本、协作开发等。常见的版本控制工具有 CVS、Subversion、RCS 等&#xff0c;不同的工具各有优缺点&#xff0c;适用于不同的场景。 2. CV…

作者头像 李华
网站建设 2026/2/16 22:02:19

53、从源码构建bash及相关操作指南

从源码构建bash及相关操作指南 1. 获取bash 如果你能直接连接互联网&#xff0c;获取bash应该不成问题。bash主页位于 http://www.gnu.org/software/bash/bash.html &#xff0c;从这里你可以找到当前发行版的最新详细信息以及获取途径。 若无法直接联网&#xff0c;你也可…

作者头像 李华
网站建设 2026/2/17 8:55:43

9、HTML5 视频与微数据应用全解析

HTML5 视频与微数据应用全解析 1. 多浏览器视频支持 在网页开发中,确保原生视频能在尽可能多的浏览器上播放是一个常见需求。为解决此问题,可使用 <video> 元素的 <source> 子元素来指定不同的视频格式。示例代码如下: <video controls><sourc…

作者头像 李华
网站建设 2026/2/19 14:38:59

10、网页数据处理与无障碍设计全解析

网页数据处理与无障碍设计全解析 在当今的网页开发领域,网页数据处理和无障碍设计是两个至关重要的方面。网页数据处理能够帮助开发者更高效地管理和利用网页中的数据,而无障碍设计则能让更多人平等地访问和使用网页内容。下面,我们将深入探讨这两个方面的相关知识。 网页…

作者头像 李华
网站建设 2026/2/17 13:04:48

11、网页可访问性优化全攻略

网页可访问性优化全攻略 在网页开发中,确保网页的可访问性至关重要,它能让所有用户,包括使用辅助技术的用户,都能顺利访问和使用网页内容。以下将详细介绍一些提升网页可访问性的关键技术和方法。 1. 图片处理 在网页中,图片的处理对于可访问性有着重要影响。以下几种情…

作者头像 李华