나는 if
이런 유형의 것들을 항상 사용하는데, 아직 그것에 대해 생각해 본 적은 없지만, 다음과 같은 간단한 것을 말해 봅시다:
case $1 in
test)
echo "test"
;;
test2)
echo "test"
;;
test3
echo "test3"
esac
그리고
if [[ "$1" == "test" ]]
then
echo "test"
elif [[ "$1" == "test2" ]]
then
echo "test2"
elif [[ "$1" == "test3" ]]
then
echo "test3"
fi
이 경우 가장 큰 차이점은 무엇입니까? 둘 중 하나가 객관적으로 다른 작업에 더 적합합니까?
답변1
case
단일 쉘의 값을 비교하십시오단어지정된 수의 쉘에모델 (만약에 어떠한)관련 쉘을 실행하십시오.목록 (만약에 어떠한)첫 번째 항목에서는 일치 항목을 찾았거나 전혀 일치하지 않습니다. case
평가하다단어그리고 첫 번째 일치가 발생할 때까지 각 관련 패턴은 정확히 한 번 발생합니다. case
실행된 쉘을 반환합니다.목록그렇지 않으면 0입니다.
if
가치 비교반품 상태필요한 껍질목록0으로 설정한 후 원하는 then
쉘을 실행합니다.목록일치하면 그렇지 않으면 선택사항 elif
또는 else
쉘을 실행하십시오.목록 (만약에 어떠한). if
하나 이상의 셸 반환을 실행하고 평가합니다.목록연관이 있는 s 체인의 if
모든 명령문 에 대해if
목록0을 반환합니다.
if
then
실행된 모든 또는 목록에 대해 반환하고 else
, 그렇지 않으면 원하는 if
쉘 에 관계없이 0을 반환합니다.목록반품.
답변2
귀하의 예에서는 case
하나의 변수에 대해 여러 패턴이 테스트됩니다. 변수에 대한 여러 모드를 포함하여 모든 테스트에 사용할 수 있는 여러 가지가 있지만 이는 일반적인 것입니다. $1
if ... elif
if ... elif