cha*_*987 3 ksh options input shell-script getopts
我想编写一个 shell 脚本,它将接受一些带有一些选项的参数并打印这些参数。假设该脚本的名称是abc.ksh. 该脚本的用法是 -
./abc.ksh -[a <arg>|b <arg>|c|d] <some_string>
现在我编写一个 shell 脚本,它将接受选项和参数
#!/bin/ksh
# Default Values
vara=","
varb=false
varbname=""
varc=false
# Scanning inputs
while getopts :a:b:cd option
do
case $option in
a) vara=$OPTARG;;
#shift $((OPTIND-1));;
b) varb=true
varbname=$OPTARG;;
#shift $((OPTIND-1));;
c) varc=true;;
#shift $((OPTIND-1));;
d) echo "Usage $0 \-[a|b|c|d] <filename>"
exit 0;;
\?) echo "Invalid option -$OPTARG. Please run '$0 -h' for help"
exit 1;;
:) echo "Option -$OPTARG requires an argument. Please run '$0 -d' for help"
exit 1;;
esac
done
print "Args: $* \nvara: $vara \noptfile: $varb \nvarbname: $varbname \nvarc: $varc"
Run Code Online (Sandbox Code Playgroud)
正确输入示例:
./abc.ksh -a "sample text" "some_string"./abc.ksh "some_string" -a "sample text"./abc.ksh -asample\ text some_stringsome_string输入未在我的脚本中捕获。我怎么能抓住它?
程序通常会强制“some_string”部分作为最后一个参数,因此这.abc.ksh "some_string" -a "sample text"是一个错误。如果这样做,则在解析选项后,$OPTIND将索引保存到最后一个参数("some_string"部分)。
如果这是不可接受的,那么您可以在开头检查(在您输入之前while查看是否有无前缀的参数。这将使您"some_string"在开头和结尾都有。如果您需要在中间,你可以不使用,getopts或者你可以有两组getopts。当第一个错误出现时,可能是由于非前缀参数;获取它并开始一个新的getopts以获取剩余的参数。或者你可以跳过 getopts一起推出您自己的解决方案。
| 归档时间: |
|
| 查看次数: |
8214 次 |
| 最近记录: |