또는 if 문을 사용하여 쉘 스크립트의 매개변수 유효성을 검증하십시오.

또는 if 문을 사용하여 쉘 스크립트의 매개변수 유효성을 검증하십시오.

다른 환경에서 여러 Apache 인스턴스를 다시 시작하기 위해 bash 스크립트를 작성 중입니다. 올바른 매개변수만 입력되도록 몇 가지 논리를 추가하려는 점을 제외하면 잘 작동합니다. 나는 여러 가지 방법으로 다음 진술을 시도했지만 운이 좋지 않습니다. 어떤 제안이 있으십니까?

if [[ $ENVT != qa || $ENVT != qa2 || $ENVT != stageqa || $ENVT != stage ]];
  then
    usage
fi

스테이지 환경을 사용할 때 set -x열 때처럼 반복하는 대신 첫 번째 옵션을 평가하고 함수를 호출합니다.

+ ENVT=stage
+ ACTION=stop
+ USER=www
+ '[' 2 -ne 2 ']'
+ [[ stage != qa ]]
+ usage

답변1

if이 경우 여러 조건을 사용하지 말고 case대신 다음을 사용하십시오.

case "$ENVT" in
  (qa|qa2|stageqa|stage) ;;
  (*) usage ;;
esac

답변2

기대했다품질보증, 품질보증2등.가짜보다 복잡한 테스트를 위한 가치. 만약 그들이 진짜라면가치, @Gnouc의 솔루션은 다음과 같습니다.훨씬 낫다확실히.
원래 예제 구문과 관련된 교육적 가치를 위해 이 답변을 여기에 남겨 두겠습니다.


"!="와 함께 사용하려면 "and"가 필요할 수 있습니다.

그렇다면 많은 표현식이나 연산자를 함께 연결해서는 안 되며 다음과 같은 개별 테스트를 사용해야 합니다(따옴표와 관련됨).

if [[ a1 != b1 ]] && [[ a2 != b2 ]] && [[ a3 != b3 ]] ...

그것은 다음과 같습니다:

if [[ "$ENVT" != qa ]] && [[ "$ENVT" != qa2 ]] && [[ "$ENVT" != stageqa ]] && [[ "$ENVT" != stage ]];
then
    usage
fi

보시다시피 변수 주위에 따옴표를 추가했습니다. 이는 이중 [[ ]] 내부에서는 꼭 필요한 것은 아니지만 [ ]와 같은 거의 모든 곳에서는 매우 유사합니다. 항상 인용하는 데 익숙해지는 것이 어려워서 계속 인용하겠습니다.

관련 정보