変数値をx回だけ使用

変数値をx回だけ使用

特定のIDでコマンドを実行する必要があるbashスクリプトを作成しています。ただし、1つのIDは10回しか使用できません。それ以降はIDを変更する必要があります。

たとえば、3つのIDがあります。

ID=(abcd1
abcd2
abcd3)

echo $ID

スクリプトを10回実行すると、ID値をabcd2に変更する必要があります。 10回以降は、ID値をabcd3に変更する必要があります。

Googleで検索してみましたが、似たようなものは見つかりませんでした。

編集:この場合、jsonを使用するアイデアが浮かんだので、別の記事を作成しました。ここ

ベストアンサー1

スクリプトにカウンターを置くことができます。次に、スクリプトが実行されるたびにそれを更新します。

#!/usr/bin/env bash

_list=(
  abc
  def
  ghi
)
_list_index=0 # autoupdate
_list_usage_counter=0 # autoupdate

max_uses=10
if [ $((_list_usage_counter)) -eq $((max_uses - 1)) ] ; then
  # reset counter
  sed -Ei \
    -e "s/^(_list_usage_counter)\=${_list_usage_counter}( # autoupdate)\$/\1=0\2/" \
    "$(readlink -f "$0")"
  _list_usage_counter=0

  # update list index
  sed -Ei \
    -e "s/^(_list_index)\=${_list_index}( # autoupdate)\$/\1=$((++_list_index))\2/" \
    "$(readlink -f "$0")"
fi

# make sure index is not out of bounds
if [ $_list_index -ge ${#_list[@]} ] ; then
  echo "no more items to use"
  exit
fi

# ... do stuff ...
echo "item: ${_list[_list_index]}"
echo "used: $((_list_usage_counter + 1))"

# update counter
sed -Ei \
  -e "s/^(_list_usage_counter)\=${_list_usage_counter}( # autoupdate)\$/\1=$((++_list_usage_counter))\2/" \
  "$(readlink -f "$0")"

おすすめ記事