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