1. 变量赋值与环境
export name [=word] ---------定义或修改变量及其值
export -p-------- 打印命令的名称以及所有被导出的变量名称与值
readonly name [=word]---------定义不可修改的变量及其值
readonly -p -----------打印出只读的所有变量与值
env [var = value] [ command_name [ argument........] ] ----------从程序中删除变量
env -i -------忽略继承的环境,仅使用命令行给定的变量与值
unset name ------删除变量
unset - v name1 name2 .......---------删除变量1,变量2。。。。。
unset -f function -----------删除指定函数
2. 替换运算符
$ { varName [ : ] -word } ----如果varName存在[ 且不为null ] ,则返回其值,否则返回word。一般用在变量未定义时返回默认值
${ varName [ : ] =word }------- 同上。。。。。。。。,否则设置它的值为word,并返回其值。
${ varName [ : ] +word}-------同上。。。。。。。。。,否则返回null。一般用来测试变量的存在。
${ varName [ : ] ?message}-------同上。。。。。。。。,否则显示varName:message,并退出当前命令会脚本。省略message会显示默认信息:parameter null or not set。一般用来捕捉变量未定义导致的错误.
例如:
假设count未定义,则$ { count : -1 } 返回值为1 ,$ { count : =0 } 设置count为0 ,
假设count已定义,则$ { count : +2 } 返回2,
3. 模式匹配运算符
${ variable # pattern }-------如果模式匹配于变量值开头处,则删除匹配的最短处,并返回剩下的部分。
${ variable ## pattern }-------同上。。。。。。。。。。则删除匹配的最长处,并返回剩下的部分。
${ variable % pattern }-------如果模式匹配于变量值的结尾处,则删除匹配的最短处,并返回剩下的部分。
${ variable % % pattern }-------同上。。。。。。。。,则删除匹配的最长处,并返回剩下的部分。
$ { #variable } --------返回$variable的字符长度
filename ={ 1 :- /dev/null } 给定参数则使用它,否则使用/dev/null。
例如:
假设变量path的值为/home/lucky/long.file.name ,则有
${path # / * / } 结果为lucky/long.file.name
${ path ## / * / } 结果为long.file.name
${ path % .* } 结果为/home/lucky/long.file
${ path %% . * } 结果为/home/lucky/long
4. 位置参数
$# 提供传递到shell脚本或函数的参数总数
$*, $@ 一次表示所有用命令行的参数。可用来把命令行参数传递给脚本或函数所执行的程序。
" $* " 将所有命令行参数视为单个字符串,等同于“ $1 $2....... ”
"$@" 将所有命令行参数视为单独的字符串,等同于“$1 ” 、“ $2 ” “$3”。。。。。,他会保留内嵌在每个参数里的任何空白。
shift命令用来“截去”来自列表里的位置参数,从左开始,执行后$1的初始值永远消失,取而代之的是$2的旧值,$2的之值变为$3的旧值,以此类推。$#的值依次减1,也可使用参数值改变每次截去的参数个数。