사용자로부터 입력을 받아 일부 조건을 확인한 후 새 변수에 저장하도록 설계된 다음 코드를 테스트하고 있습니다. 그러나 이 코드는 쉘 터미널에서 실행될 때 출력이나 오류를 제공하지 않습니다. 파일에 실행 권한을 부여했습니다 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
동일한 경우에만 실행되지만 블록이 실행되지 않으면 증가하지 않습니다.$counter
3
$counter
do
카운터를 증가시키려면 실행하려는 블록 외부에서 작업을 수행해야 합니다. 즉
#!/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번 요청" 주석에 명시적인 요구 사항이 있는 새 스크립트