変数2の値に基づいて変数1の値を設定します。

変数2の値に基づいて変数1の値を設定します。

次のように実行されるbashスクリプトがあります

./myscript.sh --tourney --port 22456 --matchid 5

という変数がありますmatchteams。これで、IDに基づいた試合チームのリストがあります。matchteamsmatchid値に基づいて変数値を設定する方法。

チェックリストのように

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

(スクリプトの場合、このエラーによりシェルも終了します。)

関連情報