我们正在尝试增强我们的一个脚本。
用户将传递一些参数,部分参数将具有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 shell 中的模式匹配是通过该case
构造完成的。ksh
也作为运算符(也由and[[ x = pattern ]]
复制)以及最近的版本。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]+$