2010-09-28 66 views
0

我試圖將$ duration變量與int進行比較,以查看它有多長。我需要確定要附加到文件名上的多少個0來保持乾淨的名稱,例如在BASH腳本中使用if/fi將變量與Ints進行比較

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 

感謝您的幫助!

如果有人有一個更容易的解決方案,命名文件與一致的數字,這將是偉大的!

回答

2

嘗試man printf。對於這個任務來說,遠遠好於一堆if塊。

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

同意,這是一個更加出色的解決方案。 +1。我也直接回答了OP的問題,以及您的方法的完整闡述。我希望你不會介意。 :-) – 2010-09-28 03:32:23

2

直接回答你的問題有關比較數字:

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

你的想法。 :-)

琥珀的答案是,當然,很多與森林INSTEAD-OF-樹木的角度更好的:

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

如果你喜歡使用比較符如>,而不是-lt, Bash做這樣的數字比較:

if ((duration < 1000)); then 

但是,printf是要走的路。

這將給類似影響到printf方法,也無需做任何if聲明:

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