Я пишу сценарий, который позволяет пользователю создавать резервную копию файла, который они выбирают, позволяя им вводить имя файла. после этого файл будет иметь резервную копию, в конце имени которой будет проставлена ​​дата, и он будет сохранен на домашнем диске. но всякий раз, когда я пытаюсь запустить его, я получаю сообщение об ошибке: cp: отсутствует операнд целевого файла после '_backup_2017_12_16'

Вот мой код:

title="my script 3" 
prompt="Enter:"        
options=("create a backup of a file")  
echo "$title"
PS3="$prompt "
select opt in "${options[@]}" "Quit"; do 

    case "$REPLY" in
esac
    cp "$filename""${file}_backup_$(date +%Y_%m_%d)"
done
0
First Last 16 Дек 2017 в 21:42

1 ответ

Лучший ответ
  1. Ваша выписка case в настоящее время пуста. Он нужен вам для работы с выбранным вами вариантом
  2. Между аргументами должен быть пробел: cp source dest
  3. Если вы используете массив для параметров, вы также можете поместить туда Quit
  4. Если вы выберете вариант создания резервной копии, вам нужно будет предложить пользователю ввести имя файла. Команда read используется для получения пользовательского ввода

Собирая все вместе, ваш сценарий может выглядеть так:

#!/usr/bin/env bash

options=("Backup" "Quit")
prompt="Enter: "        
title="My script 3" 

echo "$title"
PS3=$prompt

select opt in "${options[@]}"; do
   case $opt in
      "Backup")
          IFS= read -r -p "Enter filename: " filename 
          cp -- "$filename" "${filename}_backup_$(date +%Y_%m_%d)" && echo "Backup created..."
          ;;
        "Quit") break ;;
             *) echo "Wrong option..." ;;
   esac
done
2
PesaThe 16 Дек 2017 в 20:16