사용자가 여러 입력을 제공하는 경우 사용자 입력의 유효성을 검사하고 싶습니다.
예:
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")
위의 코드를 사용하면 그러한 스크립트를 테스트할 때 시간이 절약됩니다. :)