Bash脚本数组
我试图通过bash脚本读取命令行参数,但很难获得期望的结果。我想读入两个参数,一个在-var1之后,另一个在var2之后 我正在传递这些论点Bash脚本数组,bash,Bash,我试图通过bash脚本读取命令行参数,但很难获得期望的结果。我想读入两个参数,一个在-var1之后,另一个在var2之后 我正在传递这些论点 -var1 hello -var2 world args=(“$@”) x=“0” 对于((i=0;i$x)),则 var1=“${args[${i+1}]}” fi fi 回声$i 如果[${args[${i}]}==“-var2”];则 如果[$#>$x];那么 var2=“${args[${i+1}]}” fi fi 完成 它将变量var1和v
-var1 hello -var2 world
args=(“$@”)
x=“0”
对于((i=0;i$x)),则
var1=“${args[${i+1}]}”
fi
fi
回声$i
如果[${args[${i}]}==“-var2”];则
如果[$#>$x];那么
var2=“${args[${i+1}]}”
fi
fi
完成
它将变量
var1
和var2
设置为hello
,而不是var1=“hello”
和var2=“world”
。有什么想法吗?请提前感谢
#!/bin/bash
while [[ $# -gt 0 ]]; do
case "$1" in
-var1)
var1=$2
shift
;;
-var2)
var2=$2
shift
;;
*)
echo "Invalid argument: $1"
exit 1
esac
shift
done
if [[ -z $var1 ]]; then
echo "Var1 was not specified."
exit 1
fi
if [[ -z $var2 ]]; then
echo "Var2 was not specified."
exit 1
fi
... do something with var1 and var2
试着这样做:
#!/bin/bash
while [[ $# -gt 0 ]]; do
case "$1" in
-var1)
var1=$2
shift
;;
-var2)
var2=$2
shift
;;
*)
echo "Invalid argument: $1"
exit 1
esac
shift
done
if [[ -z $var1 ]]; then
echo "Var1 was not specified."
exit 1
fi
if [[ -z $var2 ]]; then
echo "Var2 was not specified."
exit 1
fi
... do something with var1 and var2
试着这样做:
#!/bin/bash
while [[ $# -gt 0 ]]; do
case "$1" in
-var1)
var1=$2
shift
;;
-var2)
var2=$2
shift
;;
*)
echo "Invalid argument: $1"
exit 1
esac
shift
done
if [[ -z $var1 ]]; then
echo "Var1 was not specified."
exit 1
fi
if [[ -z $var2 ]]; then
echo "Var2 was not specified."
exit 1
fi
... do something with var1 and var2
试着这样做:
#!/bin/bash
while [[ $# -gt 0 ]]; do
case "$1" in
-var1)
var1=$2
shift
;;
-var2)
var2=$2
shift
;;
*)
echo "Invalid argument: $1"
exit 1
esac
shift
done
if [[ -z $var1 ]]; then
echo "Var1 was not specified."
exit 1
fi
if [[ -z $var2 ]]; then
echo "Var2 was not specified."
exit 1
fi
... do something with var1 and var2
我同意konsolebox的观点
您的代码变量过多。${i+1}
实际上不会执行加法。数组扩展中的[]
中的表达式将作为算术表达式计算。请尝试以下操作:
args=("$@")
for (( i=0; i<$#; i++ ))
do
[[ ${args[i]} == "-var1" ]] && var1=${args[++i]}
[[ ${args[i]} == "-var2" ]] && var2=${args[++i]}
done
echo "var1='$var1'"
echo "var2='$var2'"
我们可以更动态地了解它:
args=("$@")
for (( i=0; i<$#; i++ )); do
[[ ${args[i]} == -* ]] && declare ${args[i]#-}=${args[++i]}
done
我同意konsolebox的观点
您的代码变量过多。${i+1}
实际上不会执行加法。数组扩展中的[]
中的表达式将作为算术表达式计算。请尝试以下操作:
args=("$@")
for (( i=0; i<$#; i++ ))
do
[[ ${args[i]} == "-var1" ]] && var1=${args[++i]}
[[ ${args[i]} == "-var2" ]] && var2=${args[++i]}
done
echo "var1='$var1'"
echo "var2='$var2'"
我们可以更动态地了解它:
args=("$@")
for (( i=0; i<$#; i++ )); do
[[ ${args[i]} == -* ]] && declare ${args[i]#-}=${args[++i]}
done
我同意konsolebox的观点
您的代码变量过多。${i+1}
实际上不会执行加法。数组扩展中的[]
中的表达式将作为算术表达式计算。请尝试以下操作:
args=("$@")
for (( i=0; i<$#; i++ ))
do
[[ ${args[i]} == "-var1" ]] && var1=${args[++i]}
[[ ${args[i]} == "-var2" ]] && var2=${args[++i]}
done
echo "var1='$var1'"
echo "var2='$var2'"
我们可以更动态地了解它:
args=("$@")
for (( i=0; i<$#; i++ )); do
[[ ${args[i]} == -* ]] && declare ${args[i]#-}=${args[++i]}
done
我同意konsolebox的观点
您的代码变量过多。${i+1}
实际上不会执行加法。数组扩展中的[]
中的表达式将作为算术表达式计算。请尝试以下操作:
args=("$@")
for (( i=0; i<$#; i++ ))
do
[[ ${args[i]} == "-var1" ]] && var1=${args[++i]}
[[ ${args[i]} == "-var2" ]] && var2=${args[++i]}
done
echo "var1='$var1'"
echo "var2='$var2'"
我们可以更动态地了解它:
args=("$@")
for (( i=0; i<$#; i++ )); do
[[ ${args[i]} == -* ]] && declare ${args[i]#-}=${args[++i]}
done
使用getopts->
while getopts "a:b:" flag
do
case "$flag" in
a) echo "var1=$OPTARG"
;;
b) echo "var2=$OPTARG"
;;
*) echo "Incorrect Usage"
;;
esac
done
然后将其作为-a“hello”-b“world”运行使用getopts->
while getopts "a:b:" flag
do
case "$flag" in
a) echo "var1=$OPTARG"
;;
b) echo "var2=$OPTARG"
;;
*) echo "Incorrect Usage"
;;
esac
done
然后将其作为-a“hello”-b“world”运行使用getopts->
while getopts "a:b:" flag
do
case "$flag" in
a) echo "var1=$OPTARG"
;;
b) echo "var2=$OPTARG"
;;
*) echo "Incorrect Usage"
;;
esac
done
然后将其作为-a“hello”-b“world”运行使用getopts->
while getopts "a:b:" flag
do
case "$flag" in
a) echo "var1=$OPTARG"
;;
b) echo "var2=$OPTARG"
;;
*) echo "Incorrect Usage"
;;
esac
done
然后将其作为-a“hello”-b“world”运行向我们展示您的命令行.bash程序-var1 hello-var2 world什么是-fef
和-scripts
?而且,$x
似乎没有必要,特别是因为它总是$i+1
。我以前看过该代码,我知道这是一种替代方法。我仍然不确定为什么上面的code不起作用,这就是我问这个问题的原因。向我们展示你的命令行。bash程序-var1 hello-var2 world什么是-fef
和-scripts
?另外,$x
似乎没有必要,特别是因为它总是$I+1
。我以前看过这段代码,我知道这是另一种选择方法。我仍然不确定为什么上面的代码不起作用,这就是我问这个问题的原因。向我们展示你的命令行。bash程序-var1 hello-var2 world什么是-fef
和-scripts
?另外,$x
似乎没有必要,特别是因为它总是$I+1
。我以前看过that代码,我理解这是另一种方法。我仍然不确定为什么上面的代码不起作用,这就是我问这个问题的原因。向我们展示您的命令行。bash程序-var1 hello-var2 world什么是-fef
和-scripts
?另外,$x
似乎没有必要,特别是因为它总是$i+1
。我以前看过该代码,我知道这是另一种方法。我仍然不确定为什么上面的代码不起作用,这就是我问这个问题的原因。