- 变量替换的高级形式
getopts命令
语法:getopts
optstring name [args]
optstring包含希望被识别并且处理的选项字符,如果某个字符的后面有一个冒号(:),说明这个选项是要指定参数的,当命令行使用这样的选项时,选项字符与参数之间应该有个空格,冒号和问号不能作为选项字符。脚本每次执行getopts命令时,他都会把命令行中的下一个选项放到变量name中,如果这个选项需要参数,他会把相应的
参数放到变量OPTARG中,然后把下一次执行getopts命令时要处理的选项的index放到变量OPTIND中,这样在getopts处理完所有选项后,最后的操作对象的index就会保存到变量OPTIND中。每一次成功地处理完一个选项以后,都会设置退出状态为0,而在处理完所有选项以后,由于没有可以处理的选项,getopts会以大于0的状态退出,从而可以作为结束循环的判断。
当用户执行脚本时没有提供需要的参数,则会把一个问号(?)赋给OPTION,同时打印诊断信息。问号(?)在Shell中是有特殊含义的,所以case中需要转义\?。
${var:-value} |
如果变量var没有被定义或为空,就是用默认值来代替变量var的值,但是不会改变var的值 |
${var:+value} |
如果变量var不为空,就是用默认值value来代替var的值,但是不会改变var的值 |
${var:=value} |
如果变量var没有被定义或为空,就把value赋给它 |
${var:?msg} |
如果变量var的值为空,那么打印msg到标准错误输出并退出脚本 |
- 文件名替换
Shell支持以下几种通配符
* |
匹配0个或多个任意的字符 |
? |
匹配一个任意字符 |
[] |
匹配指定字符范围内中的任意一个字符,前面添加^或!来表示不包含这个范围的字符 |
注意,*和?只能匹配可见文件,要匹配隐藏文件得手动添加原点(.)
- 命令替换
语法:
- $(commands)
- `command`
都可以嵌套,但`commands
\`commands\``需要转义反引号。$()要简洁,因为不用转义特殊字符。
commands可以用分号(;)分割的多个命令,也可以是管道连接的多个命令。
- 算术运算替换
内建的算术运算表达式$(()) 不能在变量前加$
expr命令 $(expr
$DAY / 7) 变量、运算符周围得有空格,let命令 算术表达式中不能有空格,且结果不会做替换
$(())还支持逻辑运算,但只能进行整数元算,小数部分会被忽略
时间: 2024-10-29 10:48:24