Bash 脚本有几个参数总是有随机顺序如何总是以正确的顺序排列它们
Bash script has several parameters always have random order how to put them in correct order always
我的脚本被一个随机生成参数的程序调用,例如
input=12 output=14 destinationroute=10.0.0.0
然后使用生成的参数调用我的脚本:
./getroute.sh input=12 output=14 destinationroute=10.0.0.0
脚本里面是这样的:
#!/bin/bash
input=
output=
destinationroute=
...
程序总是以随机顺序调用参数(例如 input=12 output=14 或 output=14 input=12),我无法更改程序。
有什么方法可以识别正确的参数并将它们放在适当的位置。
您需要以不同的方式调用函数;例如:
./getroute.sh -i 12 -o 14 -d 10.0.0.0
然后在脚本中使用 getopt
读取变量。
编辑:
我的脚本知识不深;因此,应该有更好的方法来做到这一点。
由于您无权访问该程序,您可以在脚本中添加一些行以获取输入;例如:
input=`echo $* | grep -E -o "input=[0-9]{2}" | awk -F"=" {'print'}`
您可以对其他变量执行相同的操作。
如果顺序不对,请不要依赖顺序。只需遍历参数,查看它们匹配的模式,然后适当地分配给变量:
for arg; do # default for a for loop is to iterate over "$@"
case $arg in
'input='*) input=${arg#*=} ;;
'output='*) output=${arg#*=} ;;
'destinationroute='*) destinationroute=${arg#*=} ;;
esac
done
如果出于某种原因,您确实想要更新</code>、<code>
和</code>,您可以通过将以下代码放在上面的循环之后:</p>
<pre><code>set -- "$input" "$output" "$destinationroute"
我的脚本被一个随机生成参数的程序调用,例如
input=12 output=14 destinationroute=10.0.0.0
然后使用生成的参数调用我的脚本:
./getroute.sh input=12 output=14 destinationroute=10.0.0.0
脚本里面是这样的:
#!/bin/bash
input=
output=
destinationroute=
...
程序总是以随机顺序调用参数(例如 input=12 output=14 或 output=14 input=12),我无法更改程序。
有什么方法可以识别正确的参数并将它们放在适当的位置。
您需要以不同的方式调用函数;例如:
./getroute.sh -i 12 -o 14 -d 10.0.0.0
然后在脚本中使用 getopt
读取变量。
编辑:
我的脚本知识不深;因此,应该有更好的方法来做到这一点。
由于您无权访问该程序,您可以在脚本中添加一些行以获取输入;例如:
input=`echo $* | grep -E -o "input=[0-9]{2}" | awk -F"=" {'print'}`
您可以对其他变量执行相同的操作。
如果顺序不对,请不要依赖顺序。只需遍历参数,查看它们匹配的模式,然后适当地分配给变量:
for arg; do # default for a for loop is to iterate over "$@"
case $arg in
'input='*) input=${arg#*=} ;;
'output='*) output=${arg#*=} ;;
'destinationroute='*) destinationroute=${arg#*=} ;;
esac
done
如果出于某种原因,您确实想要更新</code>、<code>
和</code>,您可以通过将以下代码放在上面的循环之后:</p>
<pre><code>set -- "$input" "$output" "$destinationroute"