我有一个 bash 脚本,执行如下
./myscript.sh --tourney --port 22456 --matchid 5
我有一个名为 的变量matchteams
。现在有根据id的比赛球队列表。如何matchteams
根据matchid的值设置变量的值。
就像清单一样
1= "asde v/s rty"
2= "ggg v/s ddd"
3= "hhh v/s ddd"
4= "udfhi v/s dfjsn"
5= "gjhi v/s fgt"
根据上面的说法matchid=5
那么如何才能自动设置的值matchteams="gjhi v/s fgt"
这是如何设置参数的代码部分
while [ $# -gt 0 ] ; do
case $1 in
'--pub') fun2exec="loadpubserveripip" ;;
'--tourney') fun2exec="loadtourneyserver" ;;
'--standby') fun2exec="loadpubserverwg" ;;
'--help') fun2exec="help" ;;
'--port') port="$2" ; shift ;;
'--matchid') matchid="$2" ; shift ;;
*) echo "Argument Error, Please type bash script.sh --help for All Available Arguments"; exit 1 ;;
esac
shift
done
if [ -z "$fun2exec" ] ; then
help
exit 2
fi
if [ -z "$port" ] ; then
echo "Please Provide Server Port 11011/22022/33033/44044/55055"
exit 3
fi
if [ -z "$matchid" ] ; then
echo "Please Provide MatchID"
exit 3
fi
$fun2exec
exit 0
答案1
使用数组:
matchlist=(
[1]="asde v/s rty"
[2]="ggg v/s ddd"
[3]="hhh v/s ddd"
[4]="udfhi v/s dfjsn"
[5]="gjhi v/s fgt"
)
该[n]=
事物将字符串分配给具体的索引在bash
.如果没有这个,您会自动获得单调递增的索引,但它们从零开始。
然后将此数组与以下内容一起使用matchid
:
matchteams=${matchlist[matchid]}
甚至
matchteams=${matchlist[matchid]?Invalid match ID $matchid}
$matchid
...如果对应于数组中不存在的索引,则将打印最后一个字符串matchlist
:
$ matchid=4
$ matchteams=${matchlist[matchid]?Invalid match ID $matchid}
$ echo "$matchteams"
udfhi v/s dfjsn
$ matchid=6
$ matchteams=${matchlist[matchid]?Invalid match ID $matchid}
bash: matchlist[matchid]: Invalid match ID 6
(如果是脚本,该错误还会终止 shell。)