linux BASH从字符串获取主要/次要版本

lbsnaicq  于 2022-11-22  发布在  Linux
关注(0)|答案(4)|浏览(106)

我是相当新的BASH脚本,我试图创建自己的脚本下载/从源代码构建一个包。但是,我想添加一些交互到我的脚本,使其为未来的新版本做好准备。
我的脚本询问用户想要安装的版本,并生成wget命令和下载链接。见下面的摘录:

# Ask user for required version
read packversion

# Download version from internet (depending on version provided above)
wget https://example.com/download/1.10/src/$packversion.tar.gz -O package.tar.gz

这可以正常工作,但是如果您查看包含1.10的url,我想从提供的字符串中只提取主要/次要版本,并预先填充该版本。
是否有一个函数可以实现这一点?
先谢谢你。

zpgglvta

zpgglvta1#

在bash中,我能够做到:

» export packversion=1.10.2
» export shortversion=${packversion%.*}
» printenv shortversion
1.10

摘自阿诺德·罗宾斯的《Bash口袋参考》(O 'Reilly,2016年,第2版):
${var%pattern}从左侧删除文本匹配 pattern 后使用 var 的值。删除最短的匹配项。
这里,{.*}是要删除的模式,它对应于补丁版本号。

cdmah0mi

cdmah0mi2#

我已经设法实现了我所追求的通过做以下:

shortversion="$(cut -d '.' -f 1 <<< "$packversion")"."$(cut -d '.' -f 2 <<< "$packversion")"

然后创建一个新的变量,我可以用它来创建url。

wget https://example.com/download/$shortversion/src/package-$packversion.tar.gz

虽然不确定这是不是最好的方法,但对我很有效。

bcs8qyzn

bcs8qyzn3#

像这样的东西吗

$ cat script.sh 
#!/bin/bash
read packversion major minor
echo "https://example.com/download/${major}.${minor}/src/${packversion}.tar.gz -O package.tar.gz"

结果:

$ bash script.sh
foobar 2 25 # Input
https://example.com/download/2.25/src/foobar.tar.gz -O package.tar.gz

**编辑:**使用此:

#!/bin/bash
read packversion
if [[ $packversion =~ [0-9]+\.[0-9]+ ]]; then
  version=${BASH_REMATCH[0]}
else
  echo "Looks like \"$packversion\" doesn't contain proper version" && exit 1
fi
echo "https://example.com/download/${version}/src/${packversion}.tar.gz -O package.tar.gz"

结果:

$ bash 123.sh
something-1.2.3-else
https://example.com/download/1.2/src/something-1.2.3-else.tar.gz -O package.tar.gz
svmlkihl

svmlkihl4#

因为这里的正确答案隐藏在其中一条注解中,这要感谢Pascal:
cut -d '.' -f 1,2 <<< "$packversion"

相关问题