이번 주에 UNIX에서 프로그래밍을 시작했는데 숙제 중 하나가 -99가 입력될 때까지 양수를 읽고 음수(0~-98)에 대해서는 오류를 표시하는 스크립트를 만드는 것이었습니다. 이것이 내가 생각 해낸 것이지만 약간 붙어 있습니다. 감사해요:)
#!/bin/bash
COUNTER=1
echo "Enter a positive integer number (-99 to quit):"
read NUMBER
echo "$NUMBER: "
while [ $NUMBER -ge $COUNTER ]; do
echo $COUNTER
((COUNTER++))
done
답변1
#!/bin/bash
while true; do
read -p 'Number (-99 to quit): '
if ! [[ "$REPLY" =~ ^-?[0-9]+$ ]]; then echo 'Error: Not an integer' >&2
elif (( REPLY == -99 )); then break
elif (( REPLY <= 0 )); then echo 'Error: Need positive integers >0' >&2
else
printf 'Got "%d", that is number %d\n' "$REPLY" "$(( ++c ))"
fi
done
이는 사용자가 입력하면 종료되는 무한 루프입니다 -99
. 양의 정수 응답은 Got "some number"
지금까지 읽은 유효 자릿수를 나타내는 코드를 표시하는 반면, 음의 정수, 0 또는 숫자가 아닌 입력은 표준 오류에 대한 진단 메시지를 제공합니다. 다른 변수 이름이 지정되지 않으면 코드에서 사용되는 변수는 REPLY
작성된 변수입니다.read
올바른 숫자 입력에 대한 테스트는 응답을 정규식과 일치시켜 수행됩니다 ^-?[0-9]+$
. 이 표현은성냥응답이 예상한 형식인 경우(선택 사항으로 대시 뒤에 최소한 한 개의 숫자가 옴) 불일치가 있는 경우 표준 오류에 대한 진단 메시지가 발행됩니다.
첫 번째 것까지는 그것이 정수인지 elif
확신할 수 없습니다 . $REPLY
그 후 (( ... ))
비교를 위해 산술 평가를 사용합니다.
테스트는 -99
음수 테스트 전에 수행되어야 합니다. 그렇지 않으면 루프를 종료할 수 없습니다.
답변2
내가 올바르게 이해했다면 다음과 같이 작동할 것입니다.
#! /bin/bash -
read -p "Enter a positive integer (-99 to quit): " USR_INT
while [[ -n "$USR_INT" ]]; do
case "$USR_INT" in
-99)
echo "Exiting..."
exit 0
;;
-*)
echo "Error, please enter a positive integer."
exit 1
;;
0)
echo "Error, please enter a positive integer."
exit 1
;;
[0-9]*)
echo "You have entered $USR_INT"
;;
*)
echo "Error, please enter a positive integer."
exit 1
;;
esac
read -p "Enter a positive integer (-99 to quit): " USR_INT
done
답변3
간단하게 유지하세요.
!/bin/bash
while :
do
echo "Enter a positive integer number (-99 to quit):"
read NUMBER
if (( NUMBER == -99 ))
then
exit
fi
echo "$NUMBER: "
COUNTER=1
while (( COUNTER <= NUMBER ))
do
echo $COUNTER
((COUNTER++))
done
done