我是Shell脚本的新手。我需要替换文件中的少量字符串值。必须从命令行读取它们,shell脚本如下所示。
test.sh --old-value yahoo.com --new-value ibibo.io --old-value xxxxxx --new-value yyy --exclude aa bb cc
现在,我希望将--old-values读取到一个数组中,将--new - 值转换为其他数组,并将--exclude转换为另一个数组。
我正在尝试以下方法。
while [[ $# -gt 1 ]]
do
key="$1"
case $key in
--old-value)
OLDVALUE="$2"
shift # past argument
;;
--new-value)
NEWVALUE="$2"
shift # past argument
;;
--exclude)
EXCLUDEFILETYPES=("$@")
shift
;;
*)
# unknown option
;;
esac
shift # past argument or value
done
但是这会将旧值读入OLDVALUE。我必须将两个--old-values读入数组。
有人可以帮忙知道如何实现这个用例吗?
答案 0 :(得分:1)
#!/bin/bash
# declare arrays
old=(); new=(); exclude=()
while [[ $# -gt 1 ]]; do
key="$1"
value="$2"
[[ $key == --old-value ]] && old+=("$value")
[[ $key == --new-value ]] && new+=("$value")
[[ $key == --exclude ]] && shift && exclude+=("$@")
shift 2
done
# show content of arrays
declare -p old new exclude
我认为--exclude aa bb cc
是最后一个参数。
示例:./test.sh --old-value yahoo.com --new-value ibibo.io --old-value xxxxxx --new-value yyy --exclude aa bb cc
输出:
declare -a old='([0]="yahoo.com" [1]="xxxxxx")' declare -a new='([0]="ibibo.io" [1]="yyy")' declare -a exclude='([0]="aa" [1]="bb" [2]="cc")'
答案 1 :(得分:0)
另一种变体:
old: yahoo.com
old: xxxxxx
new: ibibo.io
new: yyy
exc: aa
exc: bb
exc: cc
输出
--old-value yahoo.com --new-value --old-value xxxxxx --new-value yyy --exclude aa bb cc
当然,这仍有问题。例如,如果脚本被称为
old: yahoo.com
new: --old-value
exc:
注意缺少的新值参数。在这种情况下,结果当然是错误的......
Windows.scss:
.metroItemType1{
width:50%;
height:50px;
margin:3px;
}
.metroItemType2 {
width: 25%;
height: 50px;
margin: 3px;
}
.metroItemType3 {
width: auto;
height: 34px;
margin: 3px;
}
处理此类错误案例需要更复杂的状态处理。