次のように実行される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
がないと、自動的に単調に増加するインデックスが得られますが、0から始まります。
次に、この配列を次のように使用します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
(スクリプトの場合、このエラーによりシェルも終了します。)