比较命令重击的数值输出

时间:2018-11-20 14:17:23

标签: linux bash shell

我正在运行一个脚本,该脚本在文件中增加参数值:

在脚本执行之前:

  

$ cat文件

     

修订版1.2日期:2018/11/15 09:28:12;作者:根;状态:Exp;   行:+1 -1

运行脚本后:

  

$ cat文件

     

修订版1.3日期:2018/11/15 09:28:12;作者:根;状态:Exp;   行:+1 -1版本1.2日期:2018/11/15 09:28:12;作者:根;   状态:Exp;行:+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"

1 个答案:

答案 0 :(得分:0)

这里有个函数被撞,它将与版本字符串进行比较,并确定它们是否连续。在比较中,我做了两个假设。 “小数点”的数量必须相同。我还为大错误敞开了大门,请参阅我的最后一个测试用例。考虑一下这又快又脏。最好编写逻辑来比较每个十进制值,并确保最后一个小数位比前一个多一个。一个更正确的版本将能够通过首先比较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 )

因此,显然这不是最佳解决方案,但它可能会带您到达需要的地方。如果您一直在寻找正确的东西,请考虑上面讨论的逻辑。