우리는 스크립트 중 하나를 향상하려고 노력하고 있습니다.
사용자는 일부 매개변수를 전달하고 일부 매개변수 는 5.0.3
. Jboss5.0.3GA
Jboss5.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로도 복사됨) 및 최신 버전입니다.bash
zsh
[[ 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]+$