특정 ID로 명령을 실행해야 하는 bash 스크립트를 만들고 있습니다. 하지만 하나의 ID는 10번만 사용할 수 있습니다. 그 이후에는 ID가 변경되어야 합니다.
예를 들어 ID가 3개 있습니다.
ID=(abcd1
abcd2
abcd3)
echo $ID
이제 스크립트를 10번 실행하면 ID 값이 abcd2로 변경되어야 합니다. 10번 이후에는 ID 값이 abcd3으로 변경되어야 합니다.
구글에 검색해봤는데 비슷한 내용은 못 찾았어요
편집: 이 경우에는 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")"
답변2
임시 파일에 "카운터"를 저장할 수 있습니다.
#!/bin/bash
ID=(abcd1 abcd2 abcd3)
#if script run for the first time create "file" counters
id_file="/tmp/$(basename ${0})_id"
us_file="/tmp/$(basename ${0})_usage"
if [[ ! -f $id_file ]]; then
echo "0" > $id_file
fi
if [[ ! -f $us_file ]]; then
echo "0" > $us_file
fi
#set variables
max_usage=10
id="$(cat $id_file)"
usage="$(cat $us_file)"
#if all ids used, exit script
if [[ $id -eq ${#ID[@]} ]]; then
echo "No more ids available! Create new ones and delete '$id_file' and '$us_file' files."
exit
fi
if [[ $usage -lt $max_usage ]]; then
usage="$(( $(cat $us_file) + 1 ))"
echo $usage > $us_file
# do your stuff
echo "Your id is: ${ID[$id]}."
else
#reset usage and change (use next) id
usage="1"
echo "1" > $us_file
id=$((id+1))
echo "$id" > $id_file
if [[ $id -lt ${#ID[@]} ]]; then
echo "Your id x is: ${ID[$id]}."
else
echo "No more ids available! Create new ones and delete '$id_file' and '$us_file' files."
fi
fi