다음 단계에서는 입력한 숫자가 실제로 숫자인지 확인하거나 스크립트를 종료하고 숫자를 요청해야 합니다. 코드는 ShellCheck에서 괜찮아 보이지만(오류 없음), 무엇을 입력하든 숫자를 입력하지 않은 것으로 가정하고 스크립트를 종료합니다(좋은 소식, 종료가 작동함).
#!/bin/bash
echo "Please input a whole number"
read -r num1
if [ "$num1" = [0-9] ]; then
echo "Please input another whole number"
read -r num2;
else
echo "Please enter a whole number only";
exit
fi
if [ "$num2" = 0-9 ]; then
echo "Please input function: [a] for addition, [s] for subtraction, [m] for multiply, or [d] for divide";
read -r func
else
echo "Please enter whole number only"
exit
fi
if [ "$func" = "a" ]; then
echo "The sum of the two numbers is " $((num1 + num2))
elif [ "$func" = "s" ]; then
echo "The difference of the two numbers is " $((num1 - num2))
elif [ "$func" = "m" ]; then
echo "The product of the two numbers is "$((num1 * num2))
elif [ "$func" = "d" ]; then
echo "The quotient is (part of answer here) with a whole number remainder of (answer her) "$((num1 / num2))
else
echo "Please select only [a] for addtion, [s] for subtration, [m] for multiply, or [d] for divide"
fi
답변1
정규 표현식과 일치시키기 위해 항등 연산자를 사용하려고 시도했지만 =
작동하지 않습니다. 또한 정규식 비교를 지원하지 않는 것을 사용하고 있으므로 [
이를 사용해야 합니다 [[ ... ]]
. 코드의 나머지 부분이 작동하더라도 시도하려는 정규식은 최소한 하나의 숫자를 포함하는 모든 문자열과 일치합니다(즉, 유사한 숫자뿐만 아니라 123
유사한 비숫자도 일치합니다 abc123xyz
).
다음과 같이 시도해 보십시오 num1
.
while read -p 'Please input a whole number: ' -r num1 ; do
if [[ $num1 =~ ^[0-9]+$ ]] ; then
break
else
echo "Invalid input, try again."
fi
done
그리고 비슷한 일을 해서 num2
. 어쩌면 func
정규 표현식과 함께 사용할 수도 있습니다 ^[asmd]$
.
이는 루프 내의 항목(예: ^[0-9]$
정규 표현식과의 성공적인 일치)이 루프를 종료할 때(예: 실행 break
)까지 영원히 반복됩니다.
또는 약간 더 짧습니다.
while read -p 'Please input a whole number: ' -r num1 ; do
[[ $num1 =~ ^[0-9]+$ ]] && break || echo "Invalid input, try again."
done
test-something && what-to-do-if-true || what-to-do-if-false
이는 간단한 테스트를 위해 전체 구성을 입력 하고 싶지 않을 때 if/then/else/fi
편리한 바로 가기입니다 . if/then/else/fi에서 더 많은 작업을 수행할 수 있지만 성공 또는 실패 시 한 가지 작업만 수행하면 되는 경우에 유용합니다. 그런데 이 || what-to-do-if-false
부분은 선택 사항이며 이를 사용할 수 있는 여러 가지 다른 변형 방법이 있습니다.
실행하는 모든 명령은 0(참/성공) 또는 0이 아닌(거짓/실패/오류) 종료 코드로 종료됩니다. 0이 아닌 종료 코드의 범위는 1부터 255까지이며 오류 유형을 나타낼 수 있습니다("파일을 찾을 수 없음" 또는 "액세스 거부" 등과 같이 일반적으로 사용되는 일부 종료 코드가 있지만 종료 코드와 그 의미는 주로 다음 사항에 따라 다름). 실행 중인 프로그램). 따라서 이 짧은 조건부 테스트를 사용하면 이전 명령이 성공한 경우에만 명령이 실행되는지 확인할 수 있습니다. 예를 들어
cd mydir && rm myfile
또는
grep -q regex file.txt || mv file.txt /some/directory/
성공한 경우 에만 rm
실행 cd
되고 file.txt
성공한 경우에만 이동됩니다.아니요포함하다 regex
.