私たちはスクリプトの1つを改善しようとしています。
ユーザーはいくつかのパラメータを渡し、いくつかのパラメータは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]+$