getopts
getopts optstring name [args],getops用于脚本解析位置参数,optstring包含要识别的选项字符,如果字符后面跟着一个冒号“:”表示该选项需要一个参数,选项与参数用空格分开。“:”和“?”不能用作选项字符。每次调用getopts都会将下一个选项名称赋值给变量name,如果name不存在则初始化name。当选项需要参数时,选项对应的参数存储在变量OPTARG中。Shell脚本每次调用时会将变量OPTIND初始化为1,总是指向参数列表中下一个要处理的元素位置。OPTIND不会自动重置,如果想要使用一组新的参数,则必须在同一个shell调用中的多个getopts调用之间手动重置它。当选项结束时,getopts退出并返回一个大于0的值,OPTIND设置为第一个非选项参数的位置,name设置为?。getopts错误报告有两种模式,如果optstring的第一个字符是冒号,使用静默模式。如果optstring的第一个字符不是冒号,使用详细模式。如果变量OPTERR设置为0,则不会显示错误消息,即使是详细模式。当getopts遇到第一个非选项参数或遇到“--”时将终止解析。getopts通常解析位置参数,但是仍然可以传入非选项参数,在getopts解析选项参数结束时通过shift命令可以获取所有的非选项参数。getopts常用在带选项的shell脚本中解析短选项。
静默模式(silent) | 详细模式(verbose) | |
无效选项 | name=?,OPTARG=无效的选项字符,不打印错误信息 | name=?,删除OPTARG,打印错误信息 |
缺少参数 | name=:,OPTARG=缺少参数的选项字符,不打印错误信息 |
readonly
readonly [-aAf] [-p] [name[=value]] …,将每个name标记为只读,被标记为只读的name的值value后续不可修改。-f选项表示name关联的是一个函数。-a选项表示name关联的是一个索引数组变量。-A表示name关联的是一个关联数组变量。如果-a与-A同时出现,则-A优先级更高。-p选项,打印所有只读的name列表。如果name后面跟着=value,则会将value值赋值给name,并将name设置为只读。返回状态为0,除非传入了无效选项或者name不是有效的shell变量或函数名或者-f选项后的name不是函数名。readonly的作用域是全局的也就是当前shell进程。
#将test变量赋值为testReadonly,并设置为只读的
readonly test=testReadonly
#显示所有的只读变量
readonly -p
return
return [n],使shell函数停止执行并将值n返回给它的调用者。如果没有指定n,返回值是函数中执行的最后一个命令的退出状态。如果return是由陷阱处理程序执行的,用于确定状态的最后一个命令是陷阱处理程序之前执行的最后一个命令。 如果return是在DEBUG陷阱期间执行的,用于确定状态的最后一个命令是陷阱处理程序在调用return之前执行的最后一个命令。return也可用于终止通过内建命令source(.)执行的脚本,返回n或者脚本中执行的最后一个命令的退出状态,作为脚本的退出状态。如果指定了n,返回值只保留最后的8位,即会对256取模。
shift
shift [n],将位置参数向左移动n。从n+1到$#的位置参数重命名为$1到$# - n,由$# - n+1到$#的位置参数被删除。n必须是非负数,且小于等于$#。如果n为0或大于$#,位置参数不做任何改变。如果未指定n则默认n为1。返回状态为0,除非n大于$#或小于0。常用在带选项的shell脚本中。