如果历史命令和命令补充等有用的shell特性不能工作,请看一下内容。
1、环境变量
bash shell 维护大量已经执行命令、多种配置参数的设置、正在操作的环境等信息,其中很多信息存储在 shell 环境中,因此称作“环境变量(environment variable)。
可以通过输入 printenv 命令,来显示当前 shell 中所有环境变量的设置及其定义,如下所示:
# printenv
LESSKEY=/etc/lesskey.bin
NNTPSERVER=news
INFODIR=/usr/local/info:/usr/share/info:/usr/info
MANPATH=/usr/share/man:/usr/local/man:/usr/local/share/man:/usr/X11R6/man:/opt/gnome/share/man
HOSTNAME=test
HOME=/root
PATH=/sbin:/usr/sbin:/usr/local/sbin:/opt/gnome/sbin:/root/bin:/usr/local/bin
... ...
_=/usr/bin/printenv
环境变量名通常由大写字母和下划线组成,具有多种使用方式。
例如:
HOME 环境变量的值是一个包含用户主目录名的字符串;
PATH 环境变量是用冒号分开的目录列表,当查找已经执行过的命令时,shell顺序搜索这些目录;
PS1 环境变量定义了shell所显示提示的结构和内容;
“_” 环境变量(示例代码的最后一行) 表示用shell执行的最后一个命令的完成路径,在本例中,就是刚刚运行的 printenv 命令的完整路径。
可以在很多地方对环境变量进行设置:
* Linux 系统中位于/etc/profile、/etc/profile.local以及/etc/profile.d 目录中的系统配置文件。这些在每次登录系统时执行,用以帮助初始化工作环境的系统文件。
* 系统配置文件,如/etc/bashrc。这些文件通常在每次启动一个新shell以及对系统shell配置变量进行设置时,由用户个性化的bash配置文件执行。
* 用户特有的配置文件,如.bashrc,每次启动新shell时读取这个文件。
* 在shell脚本内,用于在该脚本内使用,或者导出到命令行环境。
* 为了方便从命令行设置,或在被shell执行的shell函数内设置。
通过使用 export 命令,让以后所有 shell 都可用的环境变量对父shell也可用。
经常我们在 PATH 环境变量的列分隔值中添加新目录,以便shell在该目录中访问可执行文件。
例如,系统安装了流行的Linux Firefox浏览器,Firefox通常安装在/usr/local/firefox目录下,实际执行以运行浏览器的二进制程序是/usr/local/firefox/firefox。可以通过输入 firefox 命令完整的代码来运行Firefox,但这样有些繁琐,更好的解决方案是把目录/usr/local/firefox 添加到PATH环境变量的值中。可以在当前shell下执行下面的命令来做到这一点:
export PATH=$PATH:/usr/local/firefox
输入这个命令后,可以在该shell下,通过简单地输入 firefox 并按下回车键,来执行 firefox 命令。
注意:
在环境变量前带有“$”表示要引用该变量的值,而不是引用它的名称。
设置完环境变量后,可以在任何时候使用 unset 命令取消设置。unset 命令从执行它的shell中删除环境变量以及它的值。
2、通配符和模式匹配
为了不需要完整地输入每一个文件名,并让识别特殊的文件变得更简单,Linux shell提供了大量不通的方法,来指定用于匹配特殊文件名的模式。
Linux shell提供的最基本模式匹配是两个特殊的字符,称为 通配符。它表示字符能与其他任何字符进行匹配。Linux shell支持的两个基本通配符如下:
*
星号(*) ——
也称作星形字符,它代表一行中的任意数量字符(包括无任何字符)。
*
问号(?) ——
代表任何单个字符。
除了这两个通配符外,Linux shell也支持在文件名中匹配特殊模式的其他两种方法:
* 在方括号中指定值的方位,用破折号分隔。例如,表达式 [1-3] 将于任何包含在1~3范围内的值相匹配。
* 在大括号(也成为波形括号)中指定用逗号分隔的值列表。例如,表达式{1,3}将与数字1或3相匹配。
例如,假定某一目录包含下面的文件:
file1 file1.doc file2 file2.doc
file3 file3.txt file8 other_file.doc
如何使用通配符、值的范围以及列表,与特殊的文件相匹配,如下:
Linux shell 中的模式匹配
模式 |
匹配的文件名 |
|
* |
file1,file1.doc,file2,file2.doc,file3,file3.txt,file8,other_file.doc |
|
file? |
file1,file2,file3,file8 |
|
*.doc |
file1.doc,file2.doc,other_file.doc |
|
file?.doc |
file1.doc,file2.doc |
|
file?.* |
file1.doc,file1.doc,file3.txt |
|
file[1-3] |
file1,file2,file3 |
|
file{1,3} |
file1,file3 |
|
file{1,3}.{doc,txt} |
file1.doc,file3.txt |
3、连接命令和重定向输入输出
UNIX和Linux提供了许多小且简单的命令,可以把这些命令连接在一起执行复杂的任务。
例如,一些操作系统可以提供专门命令,用于打印当前目录列表。在Linux系统中,可以通过把已有的列表命令(ls)和打印命令(lpr)连接成单独的命令序列来完成这个任务。在这个命令序列中,ls 命令的输出作为 lpr 命令的输入。
通过使用特殊的符号来连接这两个命令,该符号称作
管道(|)。如下所示:
ls | lpr
Linux shell 把一个命令的输出连接到另一个命令的输入来提供该功能。
摘自《SUSE Linux 10 宝典》P35—P39