여러 값이 제공되는 경우 읽기를 위한 입력 유효성 검사

여러 값이 제공되는 경우 읽기를 위한 입력 유효성 검사

사용자가 여러 입력을 제공하는 경우 사용자 입력의 유효성을 검사하고 싶습니다.

예:

read order_number city cost

사용자가 texas 200입력 내용과 유사한 내용을 입력하면 주문 번호가 누락되었음을 식별할 수 있어야 하며, 다음을 시도하면 항상 비용이 누락되었다고 표시됩니다.

read order_number city cost
echo ""
echo "Job details you have entered are:" $order_number $city $cost
echo ""

if [[ $order_number == '' ]] then
  echo "Order number can't be null"
  exit;
elif [[ $city == '' ]] then
  echo "city can't be null"
  exit;
elif [[ $cost == '' ]] then
  echo "cost can't be null"
  exit;
fi

답변1

각 변수가 충족해야 하는 조건에 따라 다음 스크립트를 사용할 수 있습니다.

#!/usr/bin/bash

read order_number city cost

#Check if order_number is set 
# Validate order_number starts with any number(s) 
# followed by 0 or more letters and can finish with any letter or number
grep -E --silent "^[0-9]+[A-Za-z]*" <<< "$order_number" || {
   echo "'order_number' cannot be null."
   exit 1
}

#Check if city is set (starts with some letter followed by underscores or more letters )
grep -E --silent "^[A-Za-z][A-Za-z_]+$" <<< "$city" || {
   echo "'city' cannot be null."
   exit 1
}


#Check if cost is set (validate is a number)
grep -E --silent "^[0-9]+$" <<< "$cost" || {
   echo "'cost' cannot be null (and must be an Integer)"
   exit 1
}

예를 들어 이 문자열을 읽으면 다음과 같은 "102w1 Texas_ some"결과가 발생합니다.

'cost' cannot be null (and must be an Integer)

cost읽었 더라도 some값은 숫자가 아니므로 숫자로 처리됩니다 null.
비용 변수에 대해 문자열이 비어 있지 않다고 생각하면 some원하는 것을 달성하기가 더 어려울 것입니다.


힌트

script배쉬를 테스트할 수 있습니다비대화형이것을 사용하면:

./script < <(echo -n "102w1 Texas_ 30")

위의 코드를 사용하면 그러한 스크립트를 테스트할 때 시간이 절약됩니다. :)

관련 정보