Linux bash: сравнивать строки хешей без установки переменных - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу, чтобы простая команда bash сравнила два хеш-значения, которые выводят, являются ли они одинаковыми. Вот что я попробовал:

md5sum file1 | awk '{print $1}' # outputs hash value without filename

md5sum file1 > md5sum file2 # no output even though files/hashes differ

Я пробовал варианты следующего, но пока безуспешно:

[ md5sum states.txt | awk '{print $1}' == md5sum states_copy.txt | awk '{print $1}' ]

[ (md5sum states.txt | awk '{print $1}') == (md5sum states_copy.txt | awk '{print $1}') ]

Я открыт для решения сценариев или многострочного bash, или использую shasum, но я новичок в Linux и bash, поэтому стараюсь сделать его максимально простым.

Я использую Ubuntu 18.04.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Есть много способов сделать это, так как вы использовали awk, вы можете попробовать:

md5sum f1 f2|awk '{a[$1]}END{print NR==length(a)}'

Если два хэша совпадают, выведите 0 в противном случае 1. Вы можете добавить больше файлов к md5sum:

md5sum f1 f2 f3...fn|awk '{a[$1]}END{print NR==length(a)}'
0 голосов
/ 12 сентября 2018
[ "$(<states.txt md5sum)" = "$(<states_copy.txt md5sum)" ]
  1. Используйте $(...) для получения выходных данных команды
  2. Не забудьте заключить $(...) внутри "
  3. Bash-тест поддерживает один = для сравнения строк,не двойной ==
  4. Перенаправьте файлы в md5sum, используя стандартный ввод и перенаправление <.
...