【发布时间】:2018-10-07 08:21:04
【问题描述】:
请在下面找到简化的 bash 脚本 parseArg.sh :-
#!/usr/bin/env bash
function parse(){
local propsFile=$1
echo "search file is : >$propsFile<"
while IFS='=' read -r packageKey packageValue;
do
echo "package value is >$packageValue<"
packageProcessor $packageValue
echo "---------------------------------------------------------"
done < "$propsFile"
}
function packageProcessor(){
echo "Total args : $#"
echo "All args value : >$@<"
for arg in "$@"
do
echo "$arg"
done
}
$@
下面是同一目录下的配置文件repos.conf :-
cm5-centos6.6="https://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5/ cm5-centos6.6 cm5/centos6.6 cm5/centos6.6 cm5-centos_6_6 "Cdh 5 for CentOS 6.6""
当我在同一目录中执行以下命令时:-
sh parseArg.sh 解析 repos.conf
我期待 6 个参数,但它总共提供了 10 个参数。 以下是实际输出:-
search file is : >repos.conf<
package value is >"https://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5/ cm5-centos6.6 cm5/centos6.6 cm5/centos6.6 cm5-centos_6_6 "Cdh 5 for CentOS 6.6""<
Total args : 10
All args value : >"https://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5/ cm5-centos6.6 cm5/centos6.6 cm5/centos6.6 cm5-centos_6_6 "Cdh 5 for CentOS 6.6""<
"https://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5/
cm5-centos6.6
cm5/centos6.6
cm5/centos6.6
cm5-centos_6_6
"Cdh
5
for
CentOS
6.6""
---------------------------------------------------------
【问题讨论】:
-
哎呀,您需要找到更强大的配置文件格式。也许是 JSON 或 YAML。
-
@glennjackman :不确定,在 bash 中解析 yaml 或 json 有多容易。所以想到使用这种格式的配置文件。
-
您还需要验证脚本的命令行参数:
sh parseArg.sh rm -rf .实际上会灾难性地执行该rm命令:为“未知子命令:rm”抛出错误