URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1304
[ Назад ]

Исходное сообщение
"Преобразование типов в Bash-скрипте"

Отправлено Danger Dancer , 22-Янв-03 17:28 
Моя задача - в файле содержится только цифра в формате Х.Х
Нужно вытащить её из файла и сравнить с другой цифрой
Но командой cat она вытаскивается как строка. Как её преобразовать в нецелое число? Или как сравнить строки (по идее цифры в кодах символов идут последовательно, поэтому должно подойти)

Содержание

Сообщения в этом обсуждении
"RE: Преобразование типов в Bash-скрипте"
Отправлено vnp , 22-Янв-03 21:27 
>Моя задача - в файле содержится только цифра в формате Х.Х
>Нужно вытащить её из файла и сравнить с другой цифрой
>Но командой cat она вытаскивается как строка. Как её преобразовать в
>нецелое число?

Нецелых чисел в шелле нет. Нужно сравнивать целые части (и если они
равны, то дробные).

>Или как сравнить строки (по идее цифры в кодах символов идут
>последовательно, поэтому должно подойти)

Операторы -eq, -gt и т.д. сравнивают операнды как числа:

IFS=. read whole fraction; [ $whole -lt ...] && etc


"RE: Преобразование типов в Bash-скрипте"
Отправлено Danger Dancer , 23-Янв-03 17:42 
>Операторы -eq, -gt и т.д. сравнивают операнды как числа:

конструкция  if [ `cat xxx` = '7.3' ] ; then ....
работает нормально, без ошибок, а вот если вместо = ставить < или >=, то тут он уже требует числовых значений.

>
>IFS=. read whole fraction; [ $whole -lt ...] && etc

Я не понял эту строку, поясни пожалуйста. Я поискал инфу, но насколько я понял, Команда read есть только в ksh, да и то нигде не нашел описания :(


"RE: Преобразование типов в Bash-скрипте"
Отправлено vnp , 23-Янв-03 20:55 
>>Операторы -eq, -gt и т.д. сравнивают операнды как числа:
>
>конструкция  if [ `cat xxx` = '7.3' ] ; then ....
>
>работает нормально, без ошибок, а вот если вместо = ставить < или >=, то тут он уже требует числовых значений.

Об чем и речь. Оператор '=' сравнивает строки.
>>
>>IFS=. read whole fraction; [ $whole -lt ...] && etc
>
>Я не понял эту строку, поясни пожалуйста.
>Я поискал инфу, но насколько
>я понял, Команда read есть только в ksh, да и то
>нигде не нашел описания :(

read есть в любом шелле. Она вчитывает строку в свои аргументы,
пословно (если аргументов мало, а слов много, последний аргумент
будет содержать более одного слова). Разбиение строки на слова
делается по значению IFS (internal field separator), каковой мы
делаем точкой на время выполнения команды read. man bash.

Я не люблю команду if; предпочитаю pipelines с командой [. Дело вкуса.
-lt означает "less than" т.е. <. Имеется полный комплект операторов
сравнения чисел, которые можно группировать логическими операторами
-a (and) и -o (or). В обшем, man test.


"RE: Преобразование типов в Bash-скрипте"
Отправлено Danger Dancer , 28-Янв-03 15:24 
Решение нашел : sed -e "s/....

Спасибо за советы :)