В bash shell script как преобразовать строку в число
Привет, я хотел бы преобразовать строку в число
x="0.80"
#I would like to convert x to 0.80 to compare like such:
if[ $x -gt 0.70 ]; then
echo $x >> you_made_it.txt
fi
Сейчас я получаю выражение целочисленного значения ошибки, потому что я пытаюсь сравнить строку.
спасибо
Ответы
Ответ 1
По какой-то причине это решение обращается ко мне:
if ! echo "$x $y -p" | dc | grep > /dev/null ^-; then
echo "$x > $y"
else
echo "$x < $y"
fi
Вы должны быть уверены, что $x и $y действительны (например,
содержат только числа и ноль или один '.') и,
в зависимости от того, сколько лет ваш постоянный ток, вам может потребоваться
укажите что-то вроде "10k", чтобы
распознавать нецелые значения.
Ответ 2
вы можете использовать bc
$ echo "0.8 > 0.7" | bc
1
$ echo "0.8 < 0.7" | bc
0
$ echo ".08 > 0.7" | bc
0
поэтому вы можете проверить 0 или 1 в script.
Ответ 3
Bash не понимает числа с плавающей запятой. Он понимает только целые числа.
Вы можете либо перейти к более мощному языку сценариев (Perl, Python, Ruby...), либо выполнить всю математику через bc
или аналогичную.
Ответ 4
использовать awk
x="0.80"
y="0.70"
result=$(awk -vx=$x -vy=$y 'BEGIN{ print x>=y?1:0}')
if [ "$result" -eq 1 ];then
echo "x more than y"
fi
Ответ 5
Если ваши значения гарантированно находятся в одной форме и диапазоне, вы можете выполнить сравнение строк:
if [[ $x > 0.70 ]]
then
echo "It true"
fi
Это произойдет, если x
- ".8" (без начального нуля), например.
Однако, пока Bash не понимает десятичные значения, его встроенный printf
может отформатировать их. Таким образом, вы можете использовать это для нормализации своих значений.
$ x=.8
$ x=$(printf %.2 $x)
$ echo $x
0.80
Ответ 6
Язык bash лучше всего охарактеризовать как полнофункциональный макропроцессор, поэтому нет различия между числами и строками. Проблема в том, что test (1) работает с целыми числами.
Ответ 7
Вот мое простое решение:
BaseLine=70.0
if [ $string \> $BaseLine ]
then
echo $string
else
echo "TOO SMALL"
fi