(Переменная, разделенная на число), напечатанная в формате с плавающей точкой - Bash [неправильный номер] - PullRequest
0 голосов
/ 03 ноября 2018

Вот мой кусок кода

if [ $totalavg -gt 1000000 ]; then
    printf "%0.1f MB/s (average)\n" $(echo "scale=1; $totalavg/100000" | bc)
elif [ $totalavg -gt 1000 ]; then
    printf "%0.1f KB/s (average)\n" $(echo "scale=1; $totalavg/1000" | bc)
else
    printf "%i B/s (average)\n" "$totalavg"
fi

Переменная totalavg - это целое число, извлекаемое из / proc / files. Все в порядке, пока целое число не станет больше 1000, чтобы достичь одного из операторов if, и выясняется, что

./script.sh: row (with second if above 1000): printf: 1.7: wrong number

Я потерял 2 часа времени, возможно, из-за этой сверхъестественной проблемы смеха. Но я просто не могу это исправить, и я не знаю, что происходит.

1 Ответ

0 голосов
/ 03 ноября 2018

Я буквально скопировал ваш скрипт и перепробовал все следующее, все работает точно так, как ожидалось.

/tmp> totalavg=500 ./script.sh
500 B/s (average)
/tmp> totalavg=5000 ./script.sh
5.0 KB/s (average)
/tmp> totalavg=50000 ./script.sh
50.0 KB/s (average)
/tmp> totalavg=5000000 ./script.sh
50.0 MB/s (average)
/tmp> totalavg=50000000 ./script.sh
500.0 MB/s (average)
/tmp> totalavg=1000 ./script.sh
1000 B/s (average)
/tmp> totalavg=1001 ./script.sh
1.0 KB/s (average)
/tmp> totalavg=999 ./script.sh
999 B/s (average)
/tmp> totalavg=999999 ./script.sh
999.9 KB/s (average)
/tmp> totalavg=1000000 ./script.sh
1000.0 KB/s (average)
/tmp> totalavg=1000001 ./script.sh
10.0 MB/s (average)

/tmp> cat script.sh
#!/bin/bash

if [ $totalavg -gt 1000000 ]; then
    printf "%0.1f MB/s (average)\n" $(echo "scale=1; $totalavg/100000" | bc)
elif [ $totalavg -gt 1000 ]; then
    printf "%0.1f KB/s (average)\n" $(echo "scale=1; $totalavg/1000" | bc)
else
    printf "%i B/s (average)\n" "$totalavg"
fi

Можете ли вы попробовать скопировать ваш скрипт куда-нибудь еще и запустить его там? Или, может быть, ваша переменная окружения $totalavg установлена ​​неправильно.

...