여러 산술 조건이 있는 스크립트가 실패함

여러 산술 조건이 있는 스크립트가 실패함

숫자를 바이트로 변환하는 스크립트에 문제가 있습니다.

  • 숫자가 기가바이트 또는 테라바이트 단위로 충분히 크면 스크립트가 예상대로 실행됩니다.
  • 숫자가 킬로바이트로 변환되면 스크립트를 실행하고 숫자를 킬로바이트 단위로 표시하며 오류 메시지를 보냅니다.
  • 메가바이트 간격이면 오류 메시지가 전송됩니다.
라인 n ((: x > 1048576: 구문 오류: 잘못된 산술 연산자(""로 표시된 오류). x는 내가 입력한 숫자를 나타냅니다.
tb=1099511627776
gb=1073741824
mb=1048576
kb=1024
read number
if (( $number > $tb )); then
  echo "$(( number / tb )) terabytes"

elif (( $number > $gb )) && (( $number < $tb )); then
  echo "$(( number > gb )) gigabytes"

elif (( $number > $mb )) && (( $number < $gb )); then
  echo "$(( number > mb )) megabytes"

elif (( $number > $kb )) && (( $number < $mb )); then
  echo "$(( number > mb )) kilobytes"

fi

줄이 n중간에 있어요 elif.

답변1

이 줄에 오류가 있습니다: echo "$(( number > gb ) gigabytes"누락).

해당 줄은 다음과 같아야 합니다.echo "$(( number > gb )) gigabytes"

답변2

@Cyrus에게 감사드립니다. shellcheck 검사기에서 문제를 발견했습니다. 분명히 ((와 $number 사이의 중간 elif에서 제거하고 일반 공백으로 만들어야 하는 잘림 방지 공백( )이 있는 것 같습니다. 어떻게 이런 일이 발생합니까?

관련 정보