我是一个非常新的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 的网址,我想从提供的字符串中提取主要/次要版本并预先填充它。
我可以用它来实现这个功能吗?
提前致谢。
答案 0 :(得分:2)
我通过以下方式成功实现了我的目标:
shortversion="$(cut -d '.' -f 1 <<< "$packversion")"."$(cut -d '.' -f 2 <<< "$packversion")"
然后创建一个新变量,我可以用它来创建URL。
wget https://example.com/download/$shortversion/src/package-$packversion.tar.gz
虽然不确定它是否是最好的方式,但对我来说很有用。
答案 1 :(得分:2)
在bash中,我能够做到这一点:
» export packversion=1.10.2
» export shortversion=${packversion%.*}
» printenv shortversion
1.10
来自Arnold Robbins的 Bash Pocket Reference (O&#39; Reilly,2016年第2版):
$ { var %模式}删除文本后使用 var 的值 从左侧匹配模式。去掉 最短的匹配件。
此处,{。*}是要删除的模式,对应于补丁版本号。
答案 2 :(得分:0)
这样的事情?
$ 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