回答
有很多的方式SH解析参数。 Getopt很好。下面是手工解析事物的简单脚本:
#!/bin/sh
while echo $1 | grep -q ^-; do
eval $(echo $1 | sed 's/^-//')=$2
shift
shift
done
echo host = $host
echo user = $user
echo pass = $pass
echo args = [email protected]
样品运行的样子:
$ ./a.sh -host foo -user me -pass secret some args
host = foo
user = me
pass = secret
args = some args
请注意,这不是因为脚本的eval的一个,甚至远程强大的和大规模开放安全 孔由用户构造的字符串。这仅仅是 ,意在作为一种可能的做事方式的例子。更简单的方法是要求用户在环境中传递数据。在Bourne shell(即任何不在CSH家族):
$ host=blah user=blah pass=blah myscript.sh
工作得很好,并且变量$host
,$user
,$pass
将在脚本可用。
#!/bin/sh
echo host = ${host:?host empty or unset}
echo user = ${user?user not set}
...
@Zac很好的接收,谢谢。 – 2011-02-03 03:58:56
请注意,`getopts`是一个Bash内建函数,而`getopt`是一个外部实用程序。前者只适用于较短的选项(例如`-e`),而后者也适用于较长的选项(例如`-foo`)。请注意,有一些[问题](http://mywiki.wooledge.org/BashFAQ/035),必须解决后者(后续版本的`getopt`问题较少)。 – 2014-03-14 00:50:59
这里有一个简单的方法来处理长期和短期的选项:在这种格式
while [[ $1 == -* ]]; do
case "$1" in
-h|--help|-\?) show_help; exit 0;;
-v|--verbose) verbose=1; shift;;
-f) if (($# > 1)); then
output_file=$2; shift 2
else
echo "-f requires an argument" 1>&2
exit 1
fi ;;
--) shift; break;;
-*) echo "invalid option: $1" 1>&2; show_help; exit 1;;
esac
done
从How can I handle command-line arguments (options) to my script easily?
我采用上面威廉Pursell例子(与丹尼斯·威廉姆森的建议)的参数: script -param1 = value1 -param2 = value2 ...
这里是带有单行参数解析器的代码(将其保存在文件'脚本'中) :
#!/bin/bash
while echo $1 | grep ^- > /dev/null; do declare $(echo $1 | sed 's/-//g' | sed 's/=.*//g' | tr -d '\012')=$(echo $1 | sed 's/.*=//g' | tr -d '\012'); shift; done
echo host = $host
echo user = $user
echo pass = $pass
你把它叫做这样的:
script -host=aaa -user=bbb -pass=ccc
和结果是
host = aaa
user = bbb
pass = ccc
难道有人知道更短的代码来解析参数比这上面?
- 1. Shell脚本参数解析
- 2. shell脚本的空格分隔参数
- 3. 如何分析从参数文件变量A K shell脚本
- 4. Shell脚本和-e参数
- 5. Shell脚本参数替换
- 6. shell脚本中的参数
- 7. bash,shell脚本参数跳过脚本的一部分
- 8. shell脚本来分析日志文件
- 9. EXPR非数字的参数shell脚本
- 10. shell脚本:解析正确
- 11. 解析PowerShell脚本参数
- 12. 从shell脚本的命令行解析参数
- 13. 如何在shell脚本中解析URL参数
- 14. 在shell脚本中用引号解析参数
- 15. shell脚本:用日期解析秒数
- 16. 使用Shell脚本解析JSON数据
- 17. 传递参数的shell脚本命令
- 18. Shell脚本linux减法参数grep
- 19. 字符串中的Shell脚本参数
- 20. 传递两个参数到shell脚本
- 21. 在shell脚本中读取参数
- 22. shell脚本中的命令行参数
- 23. (已保存)bash shell脚本参数“\”
- 24. 带参数的shell脚本呈现
- 25. 在Shell脚本中设置JVM参数
- 26. 如何传递参数到shell脚本
- 27. Bourne Shell脚本中的“参数太少”
- 28. shell脚本的变量参数
- 29. linux shell脚本案例参数输入
- 30. 简单的shell脚本,参数太多
考虑不选择选项,而是通过环境传递值:例如“host = hostname user = me myscript.sh” – 2011-02-03 17:25:11
http://stackoverflow.com/questions/192249/how-do-i-parse-command -bash-arguments-in-bash,它比较纯粹的bash switch,getopts(POSIX shell内置)和getopt(非推荐,除非它是util-linux版本,并且你使用它非POSIX功能,以避免与空参数问题,等等。) – 2015-09-05 04:35:15