여러 단어와 단어 변형에 대한 출력을 제공하는 스크립트를 얻으려고 합니다. 변수에 -o를 추가하고, 단어를 인용하고, 함께 연결해 보았습니다. varname의 각 단어는 나에게 출력하려는 표시 단어입니다. 이 문제를 해결할 수 있는 방법이 있습니까? 아니면 각 변수를 개별적으로 설정해야 합니까? 예: varname1=even varname2=Even varname3=EVEN 등.
#!/bin/bash
varname1=even -o Even -o EVEN
varrname2=odd -o Odd -o ODD
varname3=zero -o Zero -o ZERO
varname4=negative -o Negative -o NEGATIVE
# Ask the user for one of four select words
echo "Type one of the following words:"
echo "even, odd, zero, negative"
read varword
if [[ ("$varword" = $varname1 ) || ("$varword" = $varname2 ) || ("$varword" = $varname3 ) || ("$varword" = $varname4 ) ]]
then
echo "The approved word you have selected is $varword, great work! "
else
echo "The unapproved word you have selected is $varword, Please try again."
fi
답변1
echo "Type one of the following words:"
echo "even, odd, zero, negative"
while :; do
read varword
varword="${varword,,}" #downcase it
case "$varword" in
even|odd|zero|negative)
echo "The approved word you have selected is $varword, great work! "; break;;
*)
echo "The unapproved word you have selected is $varword, Please try again.";;
esac
done
답변2
변수에 여러 값을 저장하는 한 가지 방법은 배열입니다.이것은 bash에서 배열 변수를 사용하는 방법에 대한 문서입니다.
그러나 당신이 원하는 것은 대소 문자를 구분하지 않는 일치 인 것 같습니다. 이는 에 의해 달성될 수 있습니다 grep -iq
. i
grep에게 대소문자를 구분하지 않고 q
true 또는 false만 반환해야 한다고 grep에게 지시합니다. 또한 \|
grep 절에서 or 연산자를 사용하여 여러 단어를 일치시킬 수 있습니다. 마지막으로 이 문자열 표기법 <<<을 사용하여 변수를 grep에 직접 제공합니다. 이렇게 하면 스크립트가 크게 단순화됩니다.
#!/bin/bash
# Ask the user for one of four select words
echo "Type one of the following words:"
echo "even, odd, zero, negative"
read varword
if grep -iq "even\|odd\|zero\|negative" <<< "$varword"
then
echo "The approved word you have selected is $varword, great work! "
else
echo "The unapproved word you have selected is $varword, Please try again."
fi