이것은 사용자가 n개의 숫자를 입력하여 숫자가 홀수인지 짝수인지 알아내는 데 사용되는 스크립트 코드입니다. 하지만 내 배열이 작동하지 않는 것 같습니다.
#!/bin/sh
echo "Enter the value of n:"
read n
e=0
o=0
while [ $n -gt 0 ]
do
echo "Enter the number:"
read a
t=`expr $a % 2`
if [ $t -eq 0 ]
then
even[e]=$a
e=`expr $e + 1`
else
odd[o]=$a
o=`expr $o + 1`
fi
n=`expr $n - 1`
done
echo "The even numbers are ${even[*]}"
echo "The odd numbers are ${odd[*]}"
exit 0
다음과 같은 오류가 발생합니다.
test.sh: 15: test.sh: odd[o]=1: not found
test.sh: 12: test.sh: even[e]=2: not found
test.sh: 20: test.sh: Bad substitution
오류는 어디에 있으며 왜 발생합니까?
답변1
실행 중인 스크립트는 /bin/sh
배열을 전혀 지원하지 않습니다. bash
반면에 껍질은 그렇습니다.
expr
또한 산술 연산 과 같이 다소 오래된 구문을 사용하고 있습니다 .
다음은 다음을 위해 작성된 스크립트 버전입니다 bash
.
#!/bin/bash
read -p 'Enter n: ' n
while (( n > 0 ))
do
read -p 'Enter number: ' a
if (( a % 2 == 0 ))
then
even+=( "$a" )
else
odd+=( "$a" )
fi
n=$(( n - 1 ))
done
echo "The even numbers are ${even[*]}"
echo "The odd numbers are ${odd[*]}"
주요 변경 사항에는 산술 평가, 산술 대체, 사용자에게 힌트 제공, 배열에 요소 추가 및 불필요한 변수 제거를 위한 #!
뾰족한 선 수정이 포함됩니다.bash
(( ... ))
$(( ... ))
read -p
+=(...)
명령줄에서 숫자를 가져오는 이 스크립트의 비대화형 버전:
#!/bin/bash
for number do
if (( number % 2 == 0 )); then
even+=( "$number" )
else
odd+=( "$number" )
fi
done
printf 'The even numbers: %s\n' "${even[*]}"
printf 'The odd numbers: %s\n' "${odd[*]}"
시험:
$ bash script.sh 1 2 3 4
The even numbers: 2 4
The odd numbers: 1 3