BASH 中有一些保留变量,下面列出了一些:
$IFS  这个变量中保存了用于分割输入参数的分割字符,默认识空格。 
$HOME  这个变量中存储了当前用户的根目录路径。 
$PATH  这个变量中存储了当前 Shell 的默认路径字符串。 
$PS1  表示第一个系统提示符。 
$PS2  表示的二个系统提示符。 
$PWD  表示当前工作路径。 
$EDITOR 表示系统的默认编辑器名称。 
$BASH  表示当前 Shell 的路径字符串。
$0, $1, $2, ... 
表示系统传给脚本程序或脚本程序传给函数的第0个、第一个、第二个等参数。
$#   表示脚本程序的命令参数个数或函数的参数个数。
$$   表示该脚本程序的进程号,常用于生成文件名唯一的临时文件。 
$?   表示脚本程序或函数的返回状态值,正常为 0,否则为非零的错误号。
$*   表示所有的脚本参数或函数参数。
$@   和 $* 涵义相似,但是比 $* 更安全。
$!   表示最近一个在后台运行的进程的进程号。
a=$RANDOM 
echo $a 
BASH 中还有一些对变量的简洁、快速的操作,大家还记得 "${var}" 和 "$var" 同样是对变量的引用吧,对 ${var} 进行一些变化就可以产生一些新功能:
${var-default} 表示如果变量 $var 还没有设置,则保持 $var 没有设置的状态,并返回后面的默认值 default。
${var=default} 表示如果变量 $var 还没有设置,则取后面的默认值 default。 
${var+otherwise} 表示如果变量 $var 已经设置,则返回 otherwise 的值,否则返回空( null )。
${var?err_msg} 表示如果变量 $var 已经设置,则返回该变量的值,否则将后面的 err_msg 输出到标准错误输出上。
请同学们自己尝试下面的例子:
#!/bin/bash
echo ${var?There is an error}
exit 0 
还有下面一些用法,这些用法主要用于从文件路径字符串中提取有用信息:
${var#pattern}, ${var##pattern} 用于从变量 $var 中剥去最短(最长)的和 pattern 相匹配的最左侧的串。
${var%pattern}, ${var%%pattern} 用于从变量 $var 中剥去最短(最长)的和 pattern 相匹配的最右侧的串。
另外 BASH 2 中还加入下面一些操作:
${var:pos} 表示去掉变量 $var 中前 pos 个字符。
${var:pos:len} 表示变量 $var 中去掉前 pos 个字符后的剩余字符串的前 len 个字符。
${var/pattern/replacement} 表示将变量 $var 中第一个出现的 pattern 模式替换为 replacement 字符串。
${var//pattern/replacement} 表示将变量 $var 中出现的所有 pattern 模式全部都替换为 replacment 字符串。
BASH 中提供了一个小的语句格式,可以让程序快速的设计出一个字符界面的用户交互选择的菜单,该功能就是由 select 语句来实现的,select 语句的语法为:
select var in
do
statments use $var
done
#!/bin/bash 
OPTIONS="Hello Quit" 
select opt in $OPTIONS; do 
if [ "$opt" = "Quit" ]; then 
echo done 
exit 
elif [ "$opt" = "Hello" ]; then 
echo Hello World 
else 
clear 
echo bad option 
fi 
done 
exit 0
#!/bin/bash 
passwd="aka@tsinghua" 
ftp -n localhost <<FTPFTP
user anonymous $passwd 
binary 
bye 
FTPFTP 
另外一个非常有用的重定向操作符是 "-",请看下面这个例子:
$ (cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)
该命令表示把 /source/directory 目录下的所有文件通过压缩和解压,快速的全部移动到 /dest/directory 目录下去,这个命令在 /source/directory 和 /dest/directory 不处在同一个文件系统下时将显示出特别的优势。
n<&- 表示将 n 号输入关闭 
<&- 表示关闭标准输入(键盘)
n>&- 表示将 n 号输出关闭
>&- 表示将标准输出关闭
| 运算符 | 含义( 满足下面要求时返回 TRUE ) | 
| -e file | 文件 file 已经存在 | 
| -f file | 文件 file 是普通文件 | 
| -s file | 文件 file 大小不为零 | 
| -d file | 文件 file 是一个目录 | 
| -r file | 文件 file 对当前用户可以读取 | 
| -w file | 文件 file 对当前用户可以写入 | 
| -x file | 文件 file 对当前用户可以执行 | 
| -g file | 文件 file 的 GID 标志被设置 | 
| -u file | 文件 file 的 UID 标志被设置 | 
| -O file | 文件 file 是属于当前用户的 | 
| -G file | 文件 file 的组 ID 和当前用户相同 | 
| file1 -nt file2 | 文件 file1 比 file2 更新 | 
| file1 -ot file2 | 文件 file1 比 file2 更老 | 
本文出自 “cruisezhao” 博客,请务必保留此出处http://132408.blog.51cto.com/122408/1739419
原文:http://132408.blog.51cto.com/122408/1739419