使用以下代码,DBUSER变量始终设置为0,而不是从命令行传递的值。
我无法弄清楚我做错了什么导致DBUSER被设置为0而不是命令行输入参数提供的实际值。
我在这里做错了什么?
FIRST_DAY=$(date +%d)
LAST_DAY=$(date +%d)
MONTH=$(date +%m)
OUTPUT_FILENAME="usage_output.csv"
DBUSER=""
DBPASS=""
for ((i=1;i<=$#;i++));
do
if [ ${!i} = "-sd" ]
then ((i++))
let FIRST_DAY="${!i}";
elif [ ${!i} = "-ed" ];
then ((i++))
let LAST_DAY="${!i}";
elif [ ${!i} = "-m" ];
then ((i++))
let MONTH="${!i}";
elif [ ${!i} = "-dbuser" ];
then ((i++))
let DBUSER="${!i}";
elif [ ${!i} = "-dbpass" ];
then ((i++))
let DBPASS="${!i}";
fi
done;
echo "${DBUSER}" "${DBPASS}"
命令行:
./get_gs_neotek_usage.sh -dbpass 123456 -dbuser tester -sd 1 -ed 5 -m 9
输出始终为
0 123456
无论我传递什么作为-dbuser的值。但是所有其他输入参数都按预期设置。
答案 0 :(得分:2)
Bash将作业0
中使用的任何字符串值转换为DBUSER="${!i}"
,只需使用let
。
var i = 0;
do {
if (document.onkeydown = keyPress) {
i += 1;
console.log(i);
}
} while (i < 5);
function keyPress(m) {
if (m.keyCode == '38') {
i
document.write("you moved North" + "<br>");
//up arrow
} else if (m.keyCode == '40') {
document.write("you moved South" + "<br>");
//down arrow
} else if (m.keyCode == '37') {
document.write("you moved West" + "<br>");
//left arrow
} else if (m.keyCode == '39') {
document.write("you moved East" + "<br>");
//right arrow
}
}
用于执行vba。
答案 1 :(得分:1)
我建议使用正确的选项解析; getopts
的限制在于它不能接受长参数,但它是标准POSIX,因此始终可用。
#!/bin/bash
FIRST_DAY=$(date +%d)
LAST_DAY=$(date +%d)
MONTH=$(date +%m)
OUTPUT_FILENAME="usage_output.csv"
DBUSER=""
DBPASS=""
while getopts ":s:e:m:u:p:" opt
do
case $opt in
s)
FIRST_DAY="$OPTARG"
;;
e)
LAST_DAY="$OPTARG"
;;
m)
MONTH="$OPTARG"
;;
u)
DBUSER="$OPTARG"
;;
p)
DBPASS="$OPTARG"
;;
\?)
echo "invalid option $OPTARG"
exit
;;
:)
echo "$OPTARG requires an argument"
exit
;;
esac
done
echo "${DBUSER}" "${DBPASS}"