В состоянии if
находятся команды (например, echo ... | md5sum ...
), а не условные выражения (например, -f /tmp/1.txt
). Чтобы использовать условное выражение, вам нужно использовать команду test
:
if ! test -f /tmp/1.txt || echo -n ${md5} /tmp/1.txt | md5sum --status --check -
или его синоним [
(обратите внимание, что он ожидает "]
" в качестве последнего аргумента, поэтому он выглядит как забавные скобки):
if ! [ -f /tmp/1.txt ] || echo -n ${md5} /tmp/1.txt | md5sum --status --check -
или в bash или zsh, вы можете использовать [[ ]]
(что не является обычной командой и имеет несколько более чистый синтаксис для более сложных условий):
if ! [[ -f /tmp/1.txt ]] || echo -n ${md5} /tmp/1.txt | md5sum --status --check -
Кстати, я вполне уверен, что вы также хотите отменить проверку состояния md5, поэтому вам также понадобится еще один "!
", чтобы также отменить это:
if ! [[ -f /tmp/1.txt ]] || ! echo -n ${md5} /tmp/1.txt | md5sum --status --check -
Редактировать: я бы также рекомендовал пропустить параметр -n
на echo
- он не нужен и не переносим. Поэтому некоторые версии echo
будут просто выводить «-n» как часть своего вывода, что приведет к путанице md5sum
. У меня была куча сценариев, которые использовали echo -n
, и мне пришлось панически переписывать их после того, как обновление системы изменило поведение echo
... поэтому с тех пор я избегал его как чума и использовал printf
когда мне нужно что-то подобное.