Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/39: Рейтинг темы: голосов - 39, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 01.07.2010
Сообщений: 38

Как присвоить переменной bash значение, считанное с диска

19.05.2012, 13:38. Показов 7264. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Попробую так:
Code
1
SIGN=$(dd if=/dev/hda skip 446 bs=1 count=1)
Просмотр значения переменной с помощью
Code
1
echo "$SIGN"
показывает пустоту (наверное, нужно какое-то преобразование типов, но в bash насколько я знаю типов как в Си нет)

Поэтому сделал так:
Code
1
echo "$SIGN" > SIGN.bin
Однако несмотря на то, что считывается только один байт, после считанного (считанных) байтов прибавляется 0А. И по всей видимости, значение инициализируется некорректно, потому что if [ $SIGN -eq 128 ] ... воспринимается интерпретатором как ошибка.

Как присвоить значение переменной, чтобы можно было потом его анализировать в скрипте?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.05.2012, 13:38
Ответы с готовыми решениями:

Присвоить переменной значение, считанное из файла
Ругается компилятор. Имеется некоторое (значение, данные) в формате *.txt, ну допустим число 44, так это число необходимо присвоить...

Как присвоить значение переменной, исходя из значения другой переменной?
Всем привет. Нужна помощь. Есть переменная, например "month" которая может принимать значения от 01 до 12, и переменная...

Как переменной описанной в программе присвоить значение переменной в Conditional Compilation Arguments?
Kak mozhno peremennij opisanoj v programme prisvoit` znachenie peremennoj v Conditional Compilation Arguments??? Eto nado chtoto tipa...

11
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 829
Регистрация: 09.09.2009
Сообщений: 29,554
19.05.2012, 16:38
имхо, результат выполнения команды - код ее завершения...
0
0 / 0 / 0
Регистрация: 01.07.2010
Сообщений: 38
19.05.2012, 18:33  [ТС]
Цитата Сообщение от Dmitry Посмотреть сообщение
имхо, результат выполнения команды - код ее завершения...
Код выполнения команды dd? Она всегда выполнится. Мне же надо анализировать значение полученного байта. Проблема в том, что dd в качестве подстановки в другую команду дополняет в конце любой считанной последовательности зачем-то 0Ah. Возможно, это баг, но мне от этого не проще. Нужен один байт, чтобы потом его проверить с помощью if - else. А тут два байта, и как-то нужно выбрать первый и присвоить его значение анализируемой переменной.
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 829
Регистрация: 09.09.2009
Сообщений: 29,554
19.05.2012, 19:32
выполните dd в файл
потом считайте этот файл например командой
cat имя_файла
получите его содержимое
0
0 / 0 / 0
Регистрация: 01.07.2010
Сообщений: 38
20.05.2012, 09:24  [ТС]
Цитата Сообщение от Dmitry Посмотреть сообщение
получите его содержимое
И что потом с этим делать? )) Там два байта, а мне нужен первый, причем heh, а не ASCII.
После присвоения переменной значения с помощью cat чтение ее по echo дает пустое место, а в операторе сравнения все такая же ошибка.

Bash
1
2
SIGN=$(cat /path/bh.bin) # где bh.bin - однобайтовый файл 
echo "$SIGN" # пустое или нечитабельное значение
Вроде бы все должно быть просто, а чет никак не выходит результат. Пробовал утилиту awk:
получаю вначале дамп этого файла od_bh.bin (увы, в нем он формируется с адресами, которые тоже читаются как значения)
Bash
1
2
awk '{print $2} od_bh.bin' # - получаю 128 (то, что нужно), но
NEW_SIGN=$(awk '{print $2} od_bh.bin') # - ошибка синтаксиса, присвоение значение перемменной не происходит
Добавлено через 12 часов 32 минуты
В общем, задача распадается на два пути решения.

1. Из полученного значения
SIGN=NEEDBYTE OA # состоит из двух байтов (или лексем???) - NEEDBYTE и невесть откуда взявшегося довеска 0Ah
выделить первый байт.

2. Каким-то образом присвоить переменной значение одного единственного байта из файла, созданного из прочитанного нужного байта NEEDBYTE.

Посоветуете что-нибудь, как это сделать?
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 829
Регистрация: 09.09.2009
Сообщений: 29,554
20.05.2012, 10:10
нагуглилась тут такая себе команда как od:
Bash
1
2
3
# od -x --read-bytes=1 --skip-bytes=446 /dev/sda
0000676 0080
0000677
0
0 / 0 / 0
Регистрация: 01.07.2010
Сообщений: 38
20.05.2012, 10:37  [ТС]
Цитата Сообщение от Dmitry Посмотреть сообщение
нагуглилась тут такая себе команда как od:
Bash
1
2
3
# od -x --read-bytes=1 --skip-bytes=446 /dev/sda
0000676 0080
0000677
О, спасибо за такой формат команды, не знал, что можно получить дамп прямо с диска. Я применял od для получения дампа файла (Ваш путь оказался короче), но проблема опять в том, что при этом получается "слишком много аргументов" (два адресных значения и одно значение самого байта, когда пытаешься работать с этим значением в операции сравнения с числом 80h. Т.е. опять приходим к необходимости выделить нужный байт и присвоить его значение переменной, которая и будет сравниваться. Но вот как? У меня никак не получается это сделать. Жопа какая-то, я весь в расстроенных чувствах.

Добавлено через 4 минуты
Может, как-то можно сравнить два файла?
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 829
Регистрация: 09.09.2009
Сообщений: 29,554
20.05.2012, 11:00
с учетом того, что вы получаете два ИЗВЕСТНЫХ адреса, и к тому же фиксированных, грохните их например sed-ом
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
20.05.2012, 12:14
Code
1
2
3
4
[guest@localhost ~]$ s=$(sudo dd if=/dev/sdb1 skip=466 bs=1 count=1 2>/dev/null | hexdump -C | awk 'NR == 1 {print $2}')
[guest@localhost ~]$ echo "$s"
43
[guest@localhost ~]$
1
0 / 0 / 0
Регистрация: 01.07.2010
Сообщений: 38
20.05.2012, 14:47  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
Code
1
2
3
4
[guest@localhost ~]$ s=$(sudo dd if=/dev/sdb1 skip=466 bs=1 count=1 2>/dev/null | hexdump -C | awk 'NR == 1 {print $2}')
[guest@localhost ~]$ echo "$s"
43
[guest@localhost ~]$
У Вас получилось? У меня нет. echo ничего не вывела, а сравнение
Bash
1
2
3
if [ $s -eq 128 ]; then
echo "ok"
fi
дает сообщение
Bash
1
line 5: [: -eq: ожидается использование унарного оператора
У меня bash-3.2 .

А может, реализовать эту задачу в perl? Только я, к сожалению, его пока не знаю.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
20.05.2012, 21:30
лучше на с, перл с хексами примерно на таких же правах как баш
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
21.05.2012, 03:31
Цитата Сообщение от Atmel Посмотреть сообщение
У Вас получилось? У меня нет. echo ничего не вывела, а сравнение
Code
1
2
3
4
5
6
7
[guest@localhost ~]$ s=$(echo x)
[guest@localhost ~]$ echo "$s"
x
[guest@localhost ~]$ s=`echo x`
[guest@localhost ~]$ echo "$s"
x
[guest@localhost ~]$
проверь, выводит ли
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.05.2012, 03:31
Помогаю со студенческими работами здесь

Как php переменной присвоить значение переменной javascript?
есть переменная php как ей присвоить значение переменной javascript?

Как в bash проверить значение переменной чтобы совпадало с одним из вариантов?
например: PARAMETER="true" # может быть enabled, on, yes а дальше что-то типа: if ]; then echo "опция включена" else echo...

Как присвоить значение переменной если значение позже устанавливается в цикле?
Кратко: if($_SESSION != ""){ $row = mysql_num_rows(mysql_query("...")); if($row > 0) $panel = "<a href='messages.php'><div...

Как присвоить значение переменной?
Как одной переменной присвоить две переменые со значениями?? Тоесть мне нужно чтото типа токого:$var1="php" ...

Как присвоить значение переменной?
Ребята извините что не по теме но как мне переменой а присвоить значение 5?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru