여기에 사용자가 입력한 날짜를 나열하고 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