使用BASH脚本中的if / fi将变量与Ints进行比较

时间:2010-09-28 03:25:53

标签: bash

我试图将$ duration变量与int进行比较,看看它有多长。我需要去除多少0来附加到文件名以保持干净的名称,例如。

cap_000001.png

cap_002938.png

我目前的陈述是:

if [ $duration < 1000 ]; then
    sudo ./v2u cap_000$duration.png
    echo 1000 seconds
fi
if [ $duration < 100 ]; then
    sudo ./v2u cap_0000$duration.png
    echo 100 seconds
fi
if [ $duration < 10 ]; then
    sudo ./v2u cap_00000$duration.png
    echo 10 seconds
fi

感谢帮助!

如果某人有更简单的解决方案来命名具有一致数字位数的文件,那么这也很棒!

3 个答案:

答案 0 :(得分:2)

试试man printf。对于这项任务而言,远远超过一堆if块。

sudo ./v2u $(printf "cap_%06d.png" "$duration")

答案 1 :(得分:2)

直接回答有关比较数字的问题:

if [ "$duration" -lt 1000 ]; then

你明白了。 : - )

当然,从森林而不是树木的角度来看,Amber的答案要好得多:

printf "cap_%06d.png" "$duration"

答案 2 :(得分:0)

如果您希望使用>而不是-lt等比较运算符,Bash会进行如下数值比较:

if (( duration < 1000 )); then

然而,printf是可行的方法。

这会对printf方法产生类似的影响,也无需执行任何if语句:

num=000000$duration
sudo ./v2u "cap_${num: -6}.png"