Как я помещаю контрольную сумму в сценарий?

Команда GREP процессы текста в строках, целые линии. Есть несколько вариантов, которые могут силой , чтобы соответствовать только частью линии или (как в вашем примере) шаблон промежутки, чтобы соответствовать более одной строке, но обычно, если вам нужно использовать такие параметры, это означает что другие инструменты должны использоваться вместо этого.

Это сказано, что я предпочел бы использовать awk в вашем первом примере:

lspci -vq | awk 'BEGIN{RS="\n\n";IGNORECASE=1} /wireless/'

и PCREGREP в секунду:

iwlist wlan0 scan | pcregrep -iMo 'cell 13(.|\n)*(?=cell 14)'
0
09.01.2015, 05:59
1 ответ

Я скачал этот инсталлятор и взглянул. Вот соответствующие фрагменты кода:

#!/bin/bash

MD5=1fe8463da9322ad9c966a57b92569a52

# The required tools:
SED=sed
MD5SUM=md5sum
CUT=cut
DATA="$SED -e '1,/^__DATA__$/d' '$0'"

# Check archive integrity:
test `eval $DATA | $MD5SUM | $CUT -d " " -f 1` = $MD5 || {
  echo "Checksum error in '$0'" >&2
  exit 1
  }

# ...

exit 0
# Everything after the next line is a .tar.bz2 file
__DATA__
[a binary blob finishes the file]

Он выполняет sed -e '1,/^__DATA__$/d' на самом скрипте, который удаляет все строки из начала (строка 1) в строку __DATA__, оставляя позади только двоичный файл. Затем двоичный файл проходит через md5sum, чтобы получить контрольную сумму, cut, затем форматирует её так, чтобы она содержала только контрольную сумму (без имени файла), и затем сравнивается с жестко закодированной контрольной суммой из более ранних версий скрипта.

Тестовое утверждение test возвращает true, когда MD5 совпадает, и false, когда MD5 не совпадает. Тест || будет коротким замыканием, когда значение теста будет истинным, что означает, что он прекращает оценку. Строфа в скобках будет работать только в том случае, если тест окажется ложным.

Так как вы, скорее всего, ничего не трогали (намеренно) после этой строки __DATA__, вероятно, виноват ваш текстовый редактор. Я подозреваю, что он добавил пробел или пустую строку, или же преобразовал строки между форматами DOS и UNIX ( узнайте больше о новых строках в Википедии).

Другая возможность - это то, что загрузка не удалась, и у вас поврежденный файл. Если вас это не беспокоит, просто удалите строку exit 1 из строки MD5 test stanza и программа установки будет работать просто отлично.

(Этот сценарий написан не очень хорошо, поэтому я совсем не удивлён, что вам пришлось его изменить, чтобы он заработал)

.
1
28.01.2020, 02:51

Теги

Похожие вопросы