2014-03-24 40 views
0

我在shell腳本中爲我的變量賦予一個長整型值,並嘗試使用它進行一些計算,但是我得到負號數的結果。在shell腳本中剔除最長的最重要的位

count=4 
    initial_value=128 
    final_value=18446744073709547520 
    step=$((($final_value - $initial_value)/($count - 1))) 
    value=$initial_value 
    for((i=1; i<=count; i++)) 
    do 
    START=`date +%s` 
    myvariable=$(mysql $database -u $user -se "SET GLOBAL join_buffer_size = $value;query to run") 
    END=`date +%s` 
    TIME=`echo "$END - $START" | bc` 
    echo "$value $TIME" >> output.txt 
    value=$(($value+$step)) 
    mysqld restart 
    done 

我output.txt的文件的輸出是這樣的:

128 20 
    -1280 20 
    -2688 21 
    -4096 20 

我不能告訴shell腳本中使用無符號長,所以它沒有砍掉數。我該如何解決它?謝謝

回答

2

您的$final_value大於bash算術的最大整數(即9223372036854775807)。使用bc代替:

count=4 
initial_value=128 
final_value=18446744073709547520 
step=$(echo "($final_value - $initial_value)/($count - 1)") 
value=$initial_value 
for((i=1; i<=count; i++)) 
do 
START=$(date +%s) 
myvariable=$(mysql $database -u $user -se "SET GLOBAL join_buffer_size = $value;query to run") 
END=$(date +%s) 
TIME=$(echo "$END - $START" | bc) 
echo "$value $TIME" >> output.txt 
value=$(echo "$value+$step" | bc) 
mysqld restart 
done 

樣本輸出(從我的副本中刪除了MySQL命令):

128 0 
6148914691236515925 0 
12297829382473031722 0 
18446744073709547519 0