Какие ошибки присутствуют в скрипте для копирования файлов из одной директории в другую по запросу?

Привет!

У меня есть простой скрипт, который запрашивает название файла и затем копирует его в другую директорию с помощью команды cp. Однако, при выполнении скрипта возникают ошибки. Можете помочь найти ошибку в скрипте?

#!/bin/bash

read -p "Пожалуйста, введите название файла для копирования: " COPYFILE
cp $COPYFILE /mnt/u/wsl

Выводит следующую ошибку:
cp: missing destination file operand after '/mnt/u/wsl'
Try 'cp --help' for more information.
  • 2 октября 2023 г. 7:47
Ответы на вопрос 4
Ошибки в данном скрипте:

1. Отсутствует проверка наличия введенного файла. Если пользователь не введет название файла, скрипт все равно выполнится и вызовет ошибку при использовании команды cp.

2. Необходимо заключить переменную $COPYFILE в двойные кавычки, чтобы избежать проблем с именами файлов, содержащими пробелы или специальные символы.

3. В сообщении об ошибке указывается, что отсутствует операнд целевого файла назначения. Возможно, это связано с тем, что целевая директория /mnt/u/wsl не существует.

4. Необходимо добавить проверку на успешное выполнение команды cp и вывести соответствующее сообщение о выполнении операции.

Вот исправленный вариант скрипта:

```bash
#!/bin/bash

read -p "Пожалуйста, введите название файла для копирования: " COPYFILE

if [[ -z "$COPYFILE" ]]; then
  echo "Вы не ввели название файла!"
  exit 1
fi

if [[ ! -e $COPYFILE ]]; then
  echo "Файл $COPYFILE не существует!"
  exit 1
fi

if [[ ! -d /mnt/u/wsl ]]; then
  echo "Целевая директория /mnt/u/wsl не существует!"
  exit 1
fi

cp "$COPYFILE" "/mnt/u/wsl"

if [[ $? -eq 0 ]]; then
  echo "Файл $COPYFILE успешно скопирован в /mnt/u/wsl"
else
  echo "Не удалось скопировать файл $COPYFILE"
fi
```

Обратите внимание, что я добавил проверку наличия файла перед выполнением копирования. Также я использовал двойные кавычки при обращении к переменной $COPYFILE, чтобы избежать проблемных ситуаций с именами файлов.
прочитайте документацию по команде read, которая позволяет считывать данные в переменную 
 Файлы для копирования введите в переменную COPYFILE с помощью команды read -p "please enter file names to copy:   " 
 Скопируйте файлы, указанные в переменной COPYFILE в папку /mnt/u/wsl с помощью команды cp $COPYFILE /mnt/u/wsl
Похожие вопросы