回答
有很多的方式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