id = s001이면 실행

id = s001이면 실행

내 변수에는 id각 주제의 이름이 제거되었습니다. 각 항목에 대한 특정 명령이 있으므로 다음과 같이 말하고 싶습니다.

if [[$id = s001]]; then do something. End

if [[$id = "s002"]]; then do something else. End

등등.

올바른 접근 방식은 무엇입니까? 감사합니다

답변1

이 문제를 해결하는 일반적인 방법은 case선언을 사용하는 것입니다.

case $id in
  (s001) do something 
         ;;
  (s002) do something else
         do something additional 
         ;;
  (s003) do something else entirely
         ;;
  (*)    do something unexpected 
         ;;
esac

강화할 몇 가지 구문은 다음과 같습니다.

  • 나는 여는 괄호와 닫는 괄호에 옵션을 넣는 것을 좋아합니다. 괄호 닫기는 필수이지만 시각적인 균형을 선호합니다.
  • 나열된 옵션 중 일치하는 옵션이 없는 경우 특정 명령을 실행하려는 경우 이 (*)옵션은 포괄적입니다 .
  • 옵션과 일치하는 각 명령은 ;;;로 끝나야 합니다. 섹션을 끝내는 덜 일반적인 옵션도 있습니다. 나는 또한 ;;섹션을 적절하게 끝냈는지 쉽게 알 수 있도록 '를 별도의 줄에 두는 경향이 있습니다 .

답변2

Schaller가 위에서 말했듯이 사건은 매우 빠르게 진행됩니다. 그렇지 않고 조건문을 선호한다면 다음과 같이 작성할 수 있습니다.

if [[ -n "${id}" ]]; then  
  if [[ "${id}" == "s001" ]]; then 
    echo "do something" 
  elif [[ "${id}" == "s002" ]]; then 
    echo "do something else" 
  fi
fi 

참고: -n 테스트는 비교가 잘못되지 않도록 ID가 설정되었는지 확인하는 것입니다. 이는 재평가를 피하기 위한 조건부 래퍼입니다.

관련 정보