Bash 스크립트: 출력이 없습니다. 오류가 없습니다!

Bash 스크립트: 출력이 없습니다. 오류가 없습니다!

사용자로부터 입력을 받아 일부 조건을 확인한 후 새 변수에 저장하도록 설계된 다음 코드를 테스트하고 있습니다. 그러나 이 코드는 쉘 터미널에서 실행될 때 출력이나 오류를 제공하지 않습니다. 파일에 실행 권한을 부여했습니다 sudo chmod +x test.sh.

#!/bin/bash

counter="0"
iso_val="100"

while [ "$counter" == "3" ]
do
    echo -n "Enter ISO [ 100-800 ]: "; read iso
    if (( "$iso" < "100" )) || (( "$iso" > "800" )); then
        echo "Error!"
    elif [ "$iso" == "" ]; then
        echo "Error!"
    else
        iso_val=$iso
        break
    fi
    counter=$[$counter + 1]
done

답변1

작성한 스크립트는 오류 없이 실행되고 출력이 생성되지 않습니다.

빠른 참고: 디버깅할 때 좋은 시작을 얻으려면 임시로 스크립트 set -x시작 부분 에 이를 추가해야 합니다 .bash

문제는 다음 줄에 있습니다.

while [ "$counter" == "3" ]

줄 뒤의 블록은 do동일한 경우에만 실행되지만 블록이 실행되지 않으면 증가하지 않습니다.$counter3$counterdo

카운터를 증가시키려면 실행하려는 블록 외부에서 작업을 수행해야 합니다. 즉

#!/bin/bash

counter="0"
iso_val="100"

while [ "$counter" -lt 3 ]
do
    echo -n "Enter ISO [ 100-800 ]: "; read iso
    if [ -z "$iso" ] || [ "$iso" -lt 100 ] || [ "$iso" -gt 800 ]; then
        echo "Error!"
    else
        iso_val=$iso
        break
    fi
    counter=$(($counter + 1))
done

실행 횟수에 제한을 설정했습니다 while. 그렇지 않으면 스크립트가 오류와 함께 종료되지 않습니다. 또한 가능할 때마다 문자열 비교를 정수 비교로 변경하겠습니다.

편집: "오류 시 최대 3번 요청" 주석에 명시적인 요구 사항이 있는 새 스크립트

관련 정보