기본 스크립팅 도움말(계속)

기본 스크립팅 도움말(계속)

다음 단계에서는 입력한 숫자가 실제로 숫자인지 확인하거나 스크립트를 종료하고 숫자를 요청해야 합니다. 코드는 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.

관련 정보