Одна из основных ошибок заключается в том, что вы пытаетесь использовать команду ls, но переменная LIST содержит только строку 'ls'. Вы можете использовать подстановку команд с синтаксисом $(command). В этом случае я бы посоветовал это сделать, поскольку он не даст вам информацию в том формате, который вы можете легко использовать. [* D0]
. В этом случае вы должны использовать сопоставление шаблонов оболочки, также известное как ошибка для синтаксического анализа вывода ls [!d1 ].
Вместо этого я предлагаю следующий метод в вашем скрипте:
#!/bin/bash
#make copies of all files in directory
for i in /home/don/* ; do
if [[ -f $i ]]; then
orig="$i"
dest="${i}.old"
cp "$orig" "$dest"
echo "Copied $i"
else
echo "${i} is not a file"
fi
done
Это использует скопление оболочки для соответствия всем файлам в каталоге. ./* означает все в текущем каталоге (.). Оператор if проверяет, является ли совпадение файлом (не работает каталоги и ссылки), и выполняет ли ваша последовательность копирования, если это так. Я изменил имена переменных как строчные, так как переменные системной среды - это верхний регистр, поэтому вы избежите любых нежелательных конфликтов имен.