LINUX.ORG.RU

Помогите найти ошибку if value > 0

 ,


0

1
#!/bin/bash

echo "$val"|grep "^[0-9]*$" word.lst
val="$"
val2="0"
if [[ $val > $val2 ]]
then
echo "You Win"

else
echo "You Lose"
fi

admin@pc:/media/admin/44B0FD9FB0FD981E/test$ ./q
0
You Lose

admin@pc:/media/admin/44B0FD9FB0FD981E/test$ ./q
10
You Lose

admin@pc:/media/admin/44B0FD9FB0FD981E/test$ ./q
22
You Lose

else должно срабатывать если число в файле 0 или 000 или 0.0000



Последнее исправление: zayac366 (всего исправлений: 1)

Ответ на: удаленный комментарий

смешно да я в линуксе новичок и изучаю его на ходу с помощю гугле и аналог. примеров

первые строки верны если допустим переменной напрямую указать число допустим val=«2» все работает верно. Надо чтобы переменная $val подхватывала значение из grep поиска.

zayac366
() автор топика

судя по выводу echo 0 10 22 переменной $val присваивается правильное значение непонятно почему не срабатывает как надо.

zayac366
() автор топика
Ответ на: комментарий от Tanger

В гугле я нашел такой пример


read -p "Enter value:" val

echo "$val"|grep "^[0-9]*$"
val="$?"

if [[ $val == 0 ]]
then
echo "Integer"
exit
fi```
И еще один пост

val="$?"
After those lines, $val is no longer the value you gave, it is now the exit [b]status of the grep[/b], so everything after that is testing the wrong thing.
[b]теперь это статус выхода grep[/b]
Но val="$?" у меня не срабатывает там должно быть что-то другое.
zayac366
() автор топика
Ответ на: комментарий от zayac366

Осталось только дописать чтоб 0.0 тоже считало меньше нуля.

zayac366
() автор топика
Ответ на: комментарий от saahriktu

Да команда -gt немного лучше за «>» она умнее и понимает что 00 два нуля не больше за 1 нуль.

Но все ровно с точками у нее траблы

./q: line 5: [[: 0.0: syntax error: invalid arithmetic operator (error token is ".0")
zayac366
() автор топика
Ответ на: комментарий от zayac366

Ну про то, что -gt сравнивает строки как числа, а не как строки в man'е написано. А если у вас там всякие 00 могут встречатся, то не только десятичная точка будет проблемой, но и числа, начинающиеся с нуля, допустим 09.

Можете обрезать десятичную точку, можете вызывать для сравнения команду bc, но, если у вас:

0.0 тоже считало меньше нуля

то вобще не понятно, какая у вас математика.

mky ★★★★★
()
Ответ на: комментарий от zayac366

After those lines, $val is no longer the value you gave, it is now the exit status of the grep, so everything after that is testing the wrong thing.

Если сам перевести не можешь, есть автоматические переводчики.

Ещё тут написано val=$?, а у тебя val=$.

Tanger ★★★★★
()
Ответ на: комментарий от Tanger

я уже сверху написал что в переменной val должно бить val=$(grep «[0-9]» word.lst)

всем спасибо за помощь

zayac366
() автор топика
Ответ на: комментарий от mky

как бы неправильно написал нужно при числах 0 00 0.0 0.000 и тому подобных чтоб выполняло else. любая цифра в нулях от 1-9 это уже then

zayac366
() автор топика
Ответ на: комментарий от mky

да обрезать и оставить только цифры так и сделаю.

zayac366
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.