linux - 比较命令 bash 的数值输出
问题描述
我正在运行一个脚本,该脚本会影响文件中的参数值:
在脚本执行之前:
$猫文件
修订1.2日期:2018/11/15 09:28:12;作者:根;状态:经验;线路:+1 -1
运行脚本后:
$猫文件
1.3修订日期:2018/11/15 09:28:12;作者:根;状态:经验;行:+1 -1 修订 1.2 日期:2018/11/15 09:28:12;作者:根;状态:经验;线路:+1 -1
我需要一个脚本来检查版本是否被更新/碰撞为比以前版本大的一个版本,如果是,它应该将消息回显为“脚本运行成功”。
$grep -iw 'revision' file | head -1 | cut -d' ' -f2
1.2
$sh <script>
$grep -iw 'revision' file | head -1 | cut -d' ' -f2
1.3
$echo -e "Script ran successfully!!! \n"
解决方案
这是一个碰撞函数,它将与版本字符串进行比较并确定它们是否连续。我在比较中做了几个假设。“小数点”的数量必须相同。我也为大错误敞开了大门,请参阅我的最后一个测试用例。考虑一下这又快又脏。编写逻辑来比较每个十进制值并确保最后一个小数位比前一个小数位可能会更好。一个更正确的版本将能够通过首先比较 a == d,然后是 b == c,然后是 f == c + 1 来比较 abc 和 def。但是,根据您要执行的操作,快速和肮脏可能成为最容易维护的。
没有任何额外的讨论,这里是快速和肮脏的版本:
function bumped() {
prev=$1
next=$2
PREV=$( sed 's/[^0-9]//g' <<<"$prev" )
NEXT=$( sed 's/[^0-9]//g' <<<"$next" )
[ $(( NEXT - PREV )) -eq 1 ]
}
function testcases() {
cat <<EOF
1.2 1.3 0
1.3 1.2 1
1.2.1 1.2.2 0
1.3 1.3.1 1
EOF
}
testcases | while
read prev next expected extra
do
bumped $prev $next
observed=$?
result="Success"
[ $observed -ne $expected ] && result="Failed"
echo "$result: bumped( $prev , $next ) = $observed ( expected: $expected )"
done
上述程序产生以下结果:
Success: bumped( 1.2 , 1.3 ) = 0 ( expected: 0 )
Success: bumped( 1.3 , 1.2 ) = 1 ( expected: 1 )
Success: bumped( 1.2.1 , 1.2.2 ) = 0 ( expected: 0 )
Success: bumped( 1.3 , 1.3.1 ) = 1 ( expected: 1 )
Failed: bumped( 1.3.1.1 , 13.1.2 ) = 0 ( expected: 1 )
很明显,这不是一个最佳解决方案,但它可能会让你到达你需要去的地方。如果您一直在寻找正确的东西,请考虑上面讨论的逻辑。
推荐阅读
- javascript - 如何从anguar2中的请求正文中获取数据
- css - 让我的盒子在 css 中响应
- java - 为什么我的 SOCKS5 UDP 实现不起作用?
- angular - 我可以使用一些自定义颜色更改 Angular Material 复选框的颜色吗?如何更改?
- javascript - 元素像亚马逊帮助页面一样保持悬停
- python - Python,在windows中获取用户名,然后保存到文本文件中
- ios - 从 cellForRowAt 更新时,UITableViewCell 中的活动约束不会更新
- axios - reactjs中的axios问题
- c# - ASP 中的 Log4Net:记录消息时不创建文件
- css - 为什么 Bootstrap 中没有行时列不浮动?