각 출력을 변수에 저장

각 출력을 변수에 저장

여기에 사용자가 입력한 날짜를 나열하고 5일 전 날짜를 출력하는 스크립트가 있습니다.

#!/bin/bash
echo "What month?"
            echo "1 - January"
            echo "2 - February"
            echo "3 - March"
            echo "4 - April"
            echo "5 - May"
            echo "6 - June"
            echo "7 - July"
            echo "8 - August"
            echo "9 - September"
            echo "10 - October"
            echo "11 - November"
            echo "12 - December"
            echo ""
            echo -n "What month?  "
            read m

            if [ "$m" == "1" ]
            then
            mn="Jan "
            elif [ "$m" == "2" ]
            then
            mn="Feb "
            elif [ "$m" == "3" ]
            then
            mn="Mar "
            elif [ "$m" == "4" ]
            then
            mn="Apr "
            elif [ "$m" == "5" ]
            then
            mn="May "
            elif [ "$m" == "6" ]
            then
            mn="Jun "
            elif [ "$m" == "7" ]
            then
            mn="Jul "
            elif [ "$m" == "8" ]
            then
            mn="Aug "
            elif [ "$m" == "9" ]
            then
            mn="Sep "
            elif [ "$m" == "10" ]
            then
            mn="Oct "
            elif [ "$m" == "11" ]
            then
            mn="Nov "
            elif [ "$m" == "12" ]
            then
            mn="Dec "
            else
            echo "Invalid month"
            fi
            echo ""

            #DAY
            echo -n "What day? "
            read d
            if [ "$d" -lt "9" ]
            then
                    mnd="$mn"" ""$d"
            elif [ "$d"  -gt "31" ]
            then
                    mnd="1"
            else
                    mnd="$mn""$d"
            fi



 for dy in {0..4}; do
    date -d "$mn $d - $dy days" +'%b %_d'
 done

산출:

What month?
8
What day?
1

Aug  1
Jul 31
Jul 30
Jul 29
Jul 28

지금 내가 원하는 것은 각 날짜를 변수에 저장하는 것입니다. 예를 들어 첫 번째 행은 Aug 1변수에 저장되어야 하며 x1 Jul 31변수에 저장되어야 합니다 x2. 첫 번째 목록의 모든 출력은 x1등에 저장되어야 함을 의미합니다 .

답변1

개별 변수를 생성하는 대신 배열을 사용하십시오.

declare -a x

for dy in {0..4}; do
  x+=( "$( date -d "$mn $d - $dy days" +'%b %_d' )" )
done

${x[0]}그러면 4개의 값에 접근할 수 있습니다 ${x[3]}.

스크립트의 첫 번째 부분에서 문 사용을 고려해 보셨나요 select?

select mn in "Jan" "Feb" "Mar" "Apr" "May" "Jun" \
             "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
do
  if [[ -z "$mn" ]]; then
    echo "Invalid choice" >&2
  else
    break
  fi
done

printf "You selected '%s'\n" "$mn"

이는 다음을 수행합니다.

1) Jan    3) Mar   5) May   7) Jul   9) Sep  11) Nov
2) Feb    4) Apr   6) Jun   8) Aug  10) Oct  12) Dec
#? 56
Invalid choice
#? 5
You selected 'May'

값은 선택한 문자열( 예:)이 $mn됩니다 .May

관련 정보