Linux 如何使用shell脚本增加版本号?
我有一个三列两位数的版本号(Linux 如何使用shell脚本增加版本号?,linux,bash,shell,sh,Linux,Bash,Shell,Sh,我有一个三列两位数的版本号(xx:xx:xx)。谁能告诉我如何使用shell脚本来增加它 Min Value 00:00:00 Max Value 99:99:99 Sample IO 10:23:56 -> 10:23:57 62:54:99 -> 62:55:00 87:99:99 -> 88:00:00 这基本上是可行的,但可能会也可能不会进行字符串填充: IN=43:99:99 F1=`echo $IN | cut -f1 '-d:'` F2=`echo $IN
xx:xx:xx
)。谁能告诉我如何使用shell脚本来增加它
Min Value
00:00:00
Max Value
99:99:99
Sample IO
10:23:56 -> 10:23:57
62:54:99 -> 62:55:00
87:99:99 -> 88:00:00
这基本上是可行的,但可能会也可能不会进行字符串填充:
IN=43:99:99
F1=`echo $IN | cut -f1 '-d:'`
F2=`echo $IN | cut -f2 '-d:'`
F3=`echo $IN | cut -f3 '-d:'`
F3=$(( F3 + 1 ))
if [ "$F3" -gt 99 ] ; then F3=00 ; F2=$(( F2 + 1 )) ; fi
if [ "$F2" -gt 99 ] ; then F2=00 ; F1=$(( F1 + 1 )) ; fi
OUT="$F1:$F2:$F3"
echo $OUT
这基本上是可行的,但可能会也可能不会进行字符串填充:
IN=43:99:99
F1=`echo $IN | cut -f1 '-d:'`
F2=`echo $IN | cut -f2 '-d:'`
F3=`echo $IN | cut -f3 '-d:'`
F3=$(( F3 + 1 ))
if [ "$F3" -gt 99 ] ; then F3=00 ; F2=$(( F2 + 1 )) ; fi
if [ "$F2" -gt 99 ] ; then F2=00 ; F1=$(( F1 + 1 )) ; fi
OUT="$F1:$F2:$F3"
echo $OUT
作为使用awk的单行程序,假设VERSION是一个变量,其中包含VERSION:
echo $VERSION | awk 'BEGIN { FS=":" } { $3++; if ($3 > 99) { $3=0; $2++; if ($2 > 99) { $2=0; $1++ } } } { printf "%02d:%02d:%02d\n", $1, $2, $3 }'
作为使用awk的单行程序,假设VERSION是一个变量,其中包含VERSION:
echo $VERSION | awk 'BEGIN { FS=":" } { $3++; if ($3 > 99) { $3=0; $2++; if ($2 > 99) { $2=0; $1++ } } } { printf "%02d:%02d:%02d\n", $1, $2, $3 }'
这很简单,只需要一些小的数学技巧和
bc
命令,下面是如何实现的:
#!/bin/bash
# read VERSION from $1 into VER
IFS=':' read -r -a VER <<< "$1"
# increment by 1
INCR=$(echo "ibase=10; ${VER[0]}*100*100+${VER[1]}*100+${VER[2]}+1"|bc)
# prepend zeros
INCR=$(printf "%06d" ${INCR})
# output the result
echo ${INCR:0:2}:${INCR:2:2}:${INCR:4:2}
#/bin/bash
#将版本从$1读入版本
IFS=':'read-r-aver很简单,只需要一些小的数学技巧和bc
命令,下面是如何:
#!/bin/bash
# read VERSION from $1 into VER
IFS=':' read -r -a VER <<< "$1"
# increment by 1
INCR=$(echo "ibase=10; ${VER[0]}*100*100+${VER[1]}*100+${VER[2]}+1"|bc)
# prepend zeros
INCR=$(printf "%06d" ${INCR})
# output the result
echo ${INCR:0:2}:${INCR:2:2}:${INCR:4:2}
#/bin/bash
#将版本从$1读入版本
如果=':'read-r-aver试试下面这一行:
awk '{gsub(/:/,"");$0++;gsub(/../,"&:");sub(/:$/,"")}7'
测试:
kent$ awk '{gsub(/:/,"");$0++;gsub(/../,"&:");sub(/:$/,"")}7' <<< "22:33:99"
22:34:00
kent$ awk '{gsub(/:/,"");$0++;gsub(/../,"&:");sub(/:$/,"")}7' <<< "22:99:99"
23:00:00
kent$ awk '{gsub(/:/,"");$0++;gsub(/../,"&:");sub(/:$/,"")}7' <<< "22:99:88"
22:99:89
kent$awk'{gsub(/:/,“”);$0++;gsub(///,“&:”;sub(/:$/,“”)}7'试试这一行:
awk '{gsub(/:/,"");$0++;gsub(/../,"&:");sub(/:$/,"")}7'
测试:
kent$ awk '{gsub(/:/,"");$0++;gsub(/../,"&:");sub(/:$/,"")}7' <<< "22:33:99"
22:34:00
kent$ awk '{gsub(/:/,"");$0++;gsub(/../,"&:");sub(/:$/,"")}7' <<< "22:99:99"
23:00:00
kent$ awk '{gsub(/:/,"");$0++;gsub(/../,"&:");sub(/:$/,"")}7' <<< "22:99:88"
22:99:89
kent$awk'{gsub(/:/,“”);$0++;gsub(///,“&:”;sub(/:$/,“”)}7'不需要任何花哨的东西(除了Bash):
我们只需使用参数扩展${ver/:}
来删除冒号:然后留下一个常用的十进制数,递增它,并使用printf
重新格式化它;然后使用更多的参数展开对数字进行分组
这假设ver
已经过彻底检查(使用正则表达式或glob)。不需要任何花哨的东西(除了Bash):
我们只需使用参数扩展${ver/:}
来删除冒号:然后留下一个常用的十进制数,递增它,并使用printf
重新格式化它;然后使用更多的参数展开对数字进行分组
这假设ver
已经过彻底检查(使用正则表达式或glob)。您可以使用IFS=:read-r F1 F3@andlrc Cool!我不知道bash中的内部字段分隔符。这需要一些工作来处理前导零,既要在算术后恢复它们,又要避免使用base-8算术。您可以使用IFS=:read-r F1 F2 F3@andlrc Cool!我不知道bash中的内部字段分隔符。这需要一些工作来处理前导零,既要在算术后恢复它们,又要避免使用8进制算术。如果主版本号小于10,则不起作用,例如,09:00:00
@gniourf\u gniourf是的,它改进了:)如果主版本号小于10,则不起作用,例如。,09:00:00
@gniourf\u gniourf是的,它改进了:)