从 unix 中的命令中提取选项和参数
Extract options and arguments from a command in unix
我正在编写一个脚本,它将拦截我在 shell (ksh93) 上发出的任何命令,
并根据我的要求处理选项和参数。
说,我有 script.ksh
./script.ksh
$ rm -rf dir1 dir2
然后我想分别提取r、f和dir1、dir2,这样我就可以单独检查每个选项,然后在删除dir1、dir2之前做更多的事情
我想出了以下代码来将选项和参数分隔到不同的数组中:
read INPUT
count=`echo $INPUT | wc -w`
echo $count
command=`echo $INPUT | cut -d' ' -f1`
echo $command
counter=2
indexOptions=0
indexArgs=0
while [ "$counter" -le "$count" ]
do
word=`echo $INPUT | cut -d' ' -f$counter`
if [[ "$word" == -* ]]
then
options["$indexOptions"]=$word
((indexOptions=indexOptions+1))
else
args["$indexArgs"]=$word
((indexArgs=indexArgs+1))
fi
((counter=counter+1))
done
但我想知道是否有更好的方法或任何其他命令或工具可以用来改进我的方法。
提前致谢。
您可以使用 getopts
。它比 getopt
更新且恕我直言更好,请参阅 a question about getopt 进行更多讨论。
我正在编写一个脚本,它将拦截我在 shell (ksh93) 上发出的任何命令, 并根据我的要求处理选项和参数。
说,我有 script.ksh
./script.ksh
$ rm -rf dir1 dir2
然后我想分别提取r、f和dir1、dir2,这样我就可以单独检查每个选项,然后在删除dir1、dir2之前做更多的事情
我想出了以下代码来将选项和参数分隔到不同的数组中:
read INPUT
count=`echo $INPUT | wc -w`
echo $count
command=`echo $INPUT | cut -d' ' -f1`
echo $command
counter=2
indexOptions=0
indexArgs=0
while [ "$counter" -le "$count" ]
do
word=`echo $INPUT | cut -d' ' -f$counter`
if [[ "$word" == -* ]]
then
options["$indexOptions"]=$word
((indexOptions=indexOptions+1))
else
args["$indexArgs"]=$word
((indexArgs=indexArgs+1))
fi
((counter=counter+1))
done
但我想知道是否有更好的方法或任何其他命令或工具可以用来改进我的方法。
提前致谢。
您可以使用 getopts
。它比 getopt
更新且恕我直言更好,请参阅 a question about getopt 进行更多讨论。