В общем, взаимодействие с пользователем - очень плохая идея. это делает невозможным автоматизацию вашего скрипта и усложняет использование пользователями, поскольку им нужно вручную вводить данные в среде, которая не позволяет завершать табуляцию.
Поскольку @maulinglawns уже объяснил , почему ваш скрипт дал сбой, я дам вам более простой способ сделать это, не требующий от ваших пользователей кропотливого ввода информации:
#!/usr/bin/env sh
days="$1"
nameoffile="$2"
nameofarchive="$3"
find -name "$nameoffile" -mtime -"$days" | tar -cvf $nameofarchive".tar.gz -T -
Затем, чтобы найти файлы с именем foo.txt
, измененные за последние 3 дня и заархивированные в bar.tar.gz`, вы должны запустить:
script.sh 3 foo.txt bar
Вы также можете добавить простую проверку ошибок, чтобы убедиться, что сценарий всегда запускайте с правильным количеством параметров:
#!/usr/bin/env sh
if [ $# -ne 3 ]; then
echo "You need to enter three arguments"
exit 1
fi
days="$1"
nameoffile="$2"
nameofarchive="$3"
find -name "$nameoffile" -mtime -"$days" | tar -cvf $nameofarchive".tar.gz -T -