Мне нужно написать сценарий оболочки, который будет отслеживать некоторые папки, указанные в команде, и давать сообщение, если в них будет создан определенный файл (имя файла будет считаться с клавиатуры).Проверьте, был ли файл создан оболочкой
Может ли кто-нибудь сказать мне, почему это не работает?
#!/bin/sh
f=`read filename`
isIn=0
for dir in $*
do
if [ ! -d $dir ]
then
echo $dir is not a directory.
fi
for i in `find $dir -type f`
do
if [ $f=$i ]
then
echo The file $f already exists.
isIn=1
break
fi
done
if [ $isIn -eq 0 ]
then
sleep 20
isIn=0
for i in `find $dir -type f`
do
if [ $f=$i ]
then
echo The file was created\!
isIn=1
break
fi
done
fi
if [ $isIn -eq 0 ]
then
echo The file was not created\!
fi
done
Идея, которую я использовал, заключалась в том, что я беру все файлы из каталога и проверяю, что файл еще не существует. Если это - показать сообщение и перейти к следующему каталогу. Если нет, то я жду. если за время, которое я ожидал, что определенный файл был создан, он появился бы в списке всех файлов, и я проверю его.
Моя проблема заключается в том, что независимо от того, какой файл я прочитал с клавиатуры, я бы получил сообщение «Файл уже существует». не сообщая мне имя файла.
Что вы ожидаете 'F =« читать filename'' делать? (Это неверно отформатировано, я заменил обратные ссылки на апострофы. См. Вторую строку вашего скрипта.) Функция 'read' не печатает ничего для stdout; скорее он хранит ввод в '$ filename'. '$ f' будет пустой строкой. –
следует читать с клавиатуры. Мне нужно поставить его между «работать», и мне нужно дать ему параметр –
Нет, вам не нужно использовать обратные ссылки. Просто напишите 'read filename'; он будет устанавливать переменную '$ filename' независимо от типа пользователя. Используйте '$ filename', а не' $ f'. –