经过几天的研究,我仍然无法找到在.sh脚本中解析cmdline args的最佳方法.根据我的参考资料,getopts cmd是要走的路,因为它"在不干扰位置参数变量的情况下提取和检查开关.意外的开关或缺少参数的开关被识别并报告为错误. "
当涉及空格但是可以识别常规和长参数(-p和--longparam)时,位置参数(例如2 - $ @,$#等)显然不能正常工作.我注意到,当使用嵌套引号传递参数时,这两种方法都会失败("这是"引用""引号"".").这三个代码示例中哪一个最能说明处理cmdline args的方法?大师不推荐使用getopt函数,所以我试图避免它!
例1:
#!/bin/bash
for i in "$@"
do
case $i in
-p=*|--prefix=*)
PREFIX=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
;;
-s=*|--searchpath=*)
SEARCHPATH=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
;;
-l=*|--lib=*)
DIR=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
;;
--default)
DEFAULT=YES
;;
*)
# unknown option
;;
esac
done
exit 0
Run Code Online (Sandbox Code Playgroud)
例2:
#!/bin/bash
echo ‘number of arguments’
echo "\$#: $#"
echo ”
echo ‘using $num’
echo "\$0: $0"
if [ $# -ge 1 ];then …Run Code Online (Sandbox Code Playgroud) 我在工作中得到了一个简单的MD5SUM脚本.除了显示进度的部分(已经计算给用户的文件的百分比)之外,它几乎完成了.我正在考虑使用带有虚拟变量的while循环来检查是否已经计算了MD5.唯一的问题是md5sum(在linux上)不会返回任何类型的反馈,除非计算出实际的md5sum.因此,很难向用户显示已处理了多少文件.这是脚本的副本.
#!/bin/bash
#MD5 verification tool
#1st argument is file name of .iso, and the 2nd argument is the the MD5 hexsum.
echo Checking file $1 .....
#calc md5 for file
SUM=`md5sum $1`
#insert while loop here?
#compare values
test $SUM = $2 && echo original || echo False
#8cd98b693ce542b671edecaed48ab06d8c
# GNOME-64.iso
exit 0
Run Code Online (Sandbox Code Playgroud)