我正在运行一个脚本,该脚本在文件中增加参数值:
在脚本执行之前:
$ 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"
答案 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 )
因此,显然这不是最佳解决方案,但它可能会带您到达需要的地方。如果您一直在寻找正确的东西,请考虑上面讨论的逻辑。