Поиск подстроки в последней строке файла
Я пишу скрипт который из всех файлов по заданной маске должен определить является ли последняя строка файла "Incorrect volume"
#!/bin/sh
f=`find -name \*-volume.log`
for file in $f
do
out = `tail -n 1 ${file#*./}`
echo $out
if [$out = "Incorrect volume" ]
then
echo "Privet"
fi
echo ${file#*./}
done
Я написал такой код но он не считывает переменную out почему-то а также не принимает условие сравнения строк. Помогите разобраться в ошибке.
Ответы (2 шт):
example
if [ "$(cat file.txt | grep "Incorrect volume" )"]; then
echo y
else
echo n
fi
вообще у вас две синтаксические ошибки:
вокруг символа
=в операторе присвоения не должно быть пробелов:out=...[— это имя программы. да, часто используется внутренняя реализация в интерпретаторе, но синтаксис надо соблюдать. между именем программы и первым аргументом должен быть пробел:[ аргумент ...
и пара недочётов:
строка может содержать пробел, потому в операторе сравнения её надо заключать в кавычки:
[ "$out" = "..." ]если ни одно из имён найденных файлов не может содержать пробела, то всё нормально, а вот если может, вам надо в корне менять весь скрипт (особенно с учётом того, что вы требуете (в шебанге) именно posix-совместимого, т.е., довольно примитивного поведения).
а вообще программа для интерпретатора awk, проверяющая наличие паттерна в последней строке файла, будет значительно компактнее:
$ awk 'END{if(/паттерн/)print FILENAME}' файл
если её дополнить вызовом программы find, то получим требуемый поиск:
$ find -name \*-volume.log -exec awk 'END{if(/паттерн/)print FILENAME}' {} \;