case
단지 패턴 매칭을 위해, 그것은 산술 평가를하지 않을 것입니다 (당신이 생각한다면 어쩌면 제외시켰다 zsh
의 <x-y>
확장 패턴 매칭 연산자). 는 [...]
단지 일치하는 하나 개의 (또는 문자 조합 소자 내에 지정된 세트에 기초하여 일부 실시 예). 그래서 예를 들면 [0-80]
일치하는 것 중 하나 개 가 하나의 경우에 문자를 0
행 8
하거나 0
(즉, 하나의 0, 1, 2, 3, 4, 5, 6, 7, 8).
다음과 같은 패턴으로 숫자를 일치시킬 수 있습니다.
case $(($number)) in
([0-9]|[1-7][0-9]|80) echo ">=0<=80";;
(8[1-9]|9[0-9]|100) echo ">=81<=100";;
... and so on
esac
그러나 올바른 도구가 아니라는 것을 쉽게 알 수 있습니다.
는 [...]
일치 하나 개 , 지정된 문자의 목록에 대해 문자를 그래서 [121-300]
그와 같은을, 그래서 중 1, 2, 1-3, 0 또는 0 모든 문자에 일치 [0-3]
또는 [0123]
.
사용하다:
if [ "$number" -ge 0 ] && [ "$number" -le 80 ]; then
echo ">=0<=80"
elif [ "$number" -ge 81 ] && [ "$number" -le 100 ]; then
echo ">=81<=100"
elif ... and so on
...
fi
사용하는 다른 방법 case
은 다음과 같습니다.
case $((
(number >= 0 && number <= 80) * 1 +
(number > 80 && number <= 100) * 2 +
(number > 100 && number <= 120) * 3 +
(number > 120 && number <= 300) * 4)) in
(1) echo ">=0<=80";;
(2) echo ">=81<=100";;
(3) echo ">=101<=120";;
(4) echo ">=121<=300";;
(0) echo "None of the above";;
esac
또는 삼항 연산자 ( x ? y : z
)를 사용하십시오 .
case $((
number >= 0 && number <= 80 ? 1 :
number > 80 && number <= 100 ? 2 :
number > 100 && number <= 120 ? 3 :
number > 120 && number <= 300 ? 4 : 0)) in...
또는 @mikeserv와 같이 상자 밖에서 생각 하고 case
논리를 뒤집고 1
산술 비교 값과 비교하십시오 .
if [ n < 0 ] - elif [ n <= 80 ] - elif [ n <= 100 ] ... - else
. 타이핑이 적고 오류가 적습니다.