2가지 조건을 확인/테스트한 다음, 시도한 특정 명령 목록을 실행하려면 어떻게 해야 합니까? 시도했지만 작동하지 않습니다.

2가지 조건을 확인/테스트한 다음, 시도한 특정 명령 목록을 실행하려면 어떻게 해야 합니까? 시도했지만 작동하지 않습니다.

혼란스럽다면 죄송합니다.

이것이 스크립트가 수행해야 하는 작업입니다.

2개의 값을 입력합니다.

데이터베이스 서버 이름 =192.168.1.1

데이터베이스 스키마 =My_DB_schema

그런 다음 이 두 값이 존재할 때 일부 명령을 실행할 수 있는 방법이 필요합니다.

샘플은 다음과 같습니다

데이터베이스 서버 이름과 데이터베이스 스키마가 다음과 같은 경우

192.168.1.1  
My_DB_schema

구현하다

command 1
command 2
    

Case 문을 사용해 보았지만 한 가지 조건만 테스트할 것 같습니다.

감사해요

답변1

제가 올바르게 이해했는지는 모르겠지만 여러 변수를 연결할 수 있습니다(예를 들어 값의 일부가 아니라는 것을 알고 있는 경우 일부 구분 기호 사용 :).

예를 들어

SERVER=foo
DB_NAME=bar

case "$SERVER:$DB_NAME" in
  foo:bar)
    echo "foobar"
    ;;
  foo:*)
    echo "foo"
    ;;
  *:bar)
    echo "bar"
    ;;
esac

따라서 서버가 있고 foo데이터베이스가 인 경우 bar, 서버가 있고 foo데이터베이스가 무엇이든 될 수 있는 경우, 서버가 무엇이든 될 수 있고 데이터베이스가 인 경우가 있습니다 bar.

이런 방식으로 관심 있는 조합을 일치시킬 수 있어야 합니다.

SERVER2개의 "조건"( 및 DB_NAME), 3개, 4개 또는 원하는 만큼 사용할 수 있습니다 .

답변2

순진하게도 간단히 할 수 있습니다

db_name=...some-database-name...
db_host=...some-database-host...

if [ "$db_host" = '192.168.1.1' ] &&
   [ "$db_name" = 'My_DB_schema' ]
then
    command-1
    command-2
fi

사용자 디렉토리방법을 보여줘두 변수를 하나로 연결하나의문자열을 확인한 다음 case문을 사용하여 이 문자열을 테스트하는 방법을 알아봅니다. 나는 개인적으로 당신이 한 일을하지 않을 것입니다.이론적으로some:host와 같은 값이 있을 수 있으며 my:name문자열의 어느 부분이 어느 변수에서 나오는지 알 수 없습니다 some:host:my:name.가장 일반적인 경우. 이는 변수 내용을 완전히 제어할 수 있는 상황에서 더 적합한 솔루션입니다.

관련 정보