입력 매개변수의 패턴 일치

입력 매개변수의 패턴 일치

우리는 스크립트 중 하나를 향상하려고 노력하고 있습니다.

사용자는 일부 매개변수를 전달하고 일부 매개변수 는 5.0.3. Jboss5.0.3GAJboss5.0.3GA에는 "5.0.3"이 있으므로 설치 바이너리 "Jboss5.0.3GA.tar"를 찾아보겠습니다.

현재 스크립트는 ksh 스크립트입니다. if스크립트에서 조건을 사용하려고 합니다 .

사용 사례 및 결과 예시:

./test.sh Jboss5.0.3GA
Match found... we'll try to locate the installation binary
./test.sh Jboss5.0.3
Match found... we'll try to locate the installation binary
./test.sh 5.0.3
Match found... we'll try to locate the installation binary
./test.sh Jboss5.1.3
No Match found ... we'll be exiting the script.

답변1

POSIX 셸의 패턴 일치는 case이 구성을 통해 수행됩니다. ksh또한 연산자( [[ x = pattern ]]and로도 복사됨) 및 최신 버전입니다.bashzsh[[ x =~ regexp ]]

그래서:

case $1 in
  (*5.0.3*)
    install=$1.tar
    echo Found;;
  (*)
    echo >&2 Not found
    exit 1;;
esac

답변2

나는 정규식에 대한 전문가는 아니지만 적어도 당신이 설명하는 내용에는 유효합니다.

#!/bin/sh

argument="$1"

#if [[ $argument =~ [a-zA-Z]*5\.0\.3[a-zA-Z]+ ]]; then# only works on bash
if echo $argument | egrep -q '[a-zA-Z]*5\.0\.3[a-zA-Z]+'; then
  #echo "Found: ${BASH_REMATCH[0]}" # for bash
  echo "Match Found"

  # you can check for $argument at some other location, here.

else
  echo "No match"
fi

다른 이름으로 저장 test하고 실행하면 다음과 같은 결과가 나타납니다.

bash test 333xxxx5.0.3xxxxx777
Match Found

bash test 333xxxx5.0.2xxxxx777
No match

bash test 5.0.3xxxxx777
Match Found

bash test 5.0.2xxxxx777
No match

전체 문자열과 일치하도록 ^시작과 끝에 추가하거나 아무것도 추가하지 않을 수 있습니다 . $이와 같이^[a-zA-Z]*5\.0\.3[a-zA-Z]+$

관련 정보