一、展开运算符:
1、${var:-default}
- 描述:
如果var存在且非null,则返回其值,否则返回default;不会对var进行赋值 - 用途:
如果变量未定义,则返回默认值 - 范例:
如果count未定义,则${count:-0}的值为0
2、${var:=default}
- 描述:
如果var存在且非null,则返回其值,否则设置var为default,并返回 - 用途:
如果变量未定义,则设置变量为默认值 - 范例:
如果count未定义,则${count:-0}设置count的值为0
3、${var:?message}
- 描述:
如果变量存在且非null,则返回其值,否则显示var:message,并退出当前的命令或者脚本;
如果省略message会出现默认信息:parameter null or not set - 用途:
为了捕捉由于变量未定义所导致的错误 - 范例:
如果count未定义,则${count:?’undefined!’}会显示:count: undefined! 并退出
4、${var:+word}
- 描述:
如果var存在且非null,则返回word,否则返回null - 用途:
为测试变量的存在与否 - 范例:
如果count已经定义,则${count:+1} 返回1(也就是“真”)
二、模式匹配运算符:
假设变量path的值为: /home/leidy/nginx/leidy.cn.log
1、${var#pattern}
- 用途:
如果模式匹配与变量的开头处,则删除匹配的最短部分,并返回剩下的内容 - 范例:
${path#/*/}的结果是: leidy/nginx/leidy.cn.log
2、${var##pattern}
- 用途:
如果模式匹配与变量的开头处,则删除匹配最长的部分,并返回剩下的部分 - 范例:
${path##/*/}的结果是: leidy.cn.log
3、${var%pattern}
- 用途:
如果模式匹配与变量的结尾处,则删除匹配的最短部分,并返回剩下的部分 - 范例:
${path%.*} 的结果是: /home/leidy/nginx/leidy.cn
4、${var%%pattern}
- 用途:
如果模式匹配与变量的结尾处,则删除匹配的最长部分,并返回剩下的部分 - 范例:
${path%%.*}的结果是: /home/leidy/nginx/leidy
三、位置参数:
所谓位置参数(positional parameter),指的是shell脚本的命令行参数(argument);同时也表示shell函数内的函数参数。他们的名称以单个数字来命名,但是当这个数字大于9的时候就应该用大括号({})括起来
- $#
是传给脚本的参数个数 - $0
是脚本本身的名字(包含路径信息) - $1
是传递给该shell脚本的第一个参数 - $2
是传递给该shell脚本的第二个参数 - ${10}
是传递给该shell脚本的第二个参数 - $@
是传给脚本的所有参数的列表 - $*
是以一个单字符串显示所有向脚本传递的参数 - $$
是脚本运行的当前进程ID号 - $?
是显示最后命令的退出状态,0表示没有错误,其他表示有错误 - $!
最近一个后台命令的进程ID。以此方式存储进程编号,可通过wait命令以供后续使用
“$@”和”$*”之间的区别:
shell> cat test.sh #!/bin/bash function print_args_at { printf "%s\n" "$@" } function print_args_star { printf "%s\n" "$*" } print_args_at "one" "two three" "four" print_args_star "one" "two three" "four" shell> sh test.sh one two three four one two three four
暂无评论