我正在开发一个shell脚本,它必须从传递的参数中提取字符串。如果我传递的参数如
test.sh arg1=someArgument Arg2=AnoTherArgument
假设用户可以在任何情况下传递带有名称和值的参数,
我必须提取参数并进行操作,例如
for arg in "$@"
do
if [ lower("${arg}") == "arg1" ] then
# extract arg1's value and do something
elif [ lower("${arg}") == "arg2" ] then
# extract arg2's value and do something
fi
done
请帮助我如何在传递的相同案例中提取参数的值?
答案 0 :(得分:2)
为清楚起见,我更喜欢这样的案例陈述:
while [ $# -gt 0 ]
do
case $1 in
a=* ) echo ${1#a=};;
b=* ) echo ${1#b=};;
# etc
esac
shift
done
答案 1 :(得分:0)
使用双括号匹配水珠图案;在“然后”之前需要分号
if [[ "$arg" = a=* ]];then echo ${arg#a=};fi
或
if [ "${arg%%=*}" = a ];then echo ${arg#a=};fi
了解更多信息
man bash
/Parameter Expansion
答案 2 :(得分:0)
为什么还要努力解析参数?把事情传递到环境中:
在foo
:
#!/bin/sh
echo Value of arg1: ${arg1-default value}
然后:
$ arg1=blah ./foo
Value of arg1: blah
和
$ ./foo
Value of arg1: default value