シェルスクリプトのバックアップコピー

シェルスクリプトのバックアップコピー
#!/bin/bash 
echo "Menu" 
echo "1. Backup file"
echo "2. Quit" 
echo "Enter Choice" 
read Choice

case $Choice" in 
       1) while : 
               echo "Enter file name" 
               read file name 
               do 
               if [ -f $filename]
               then 
                      current_time=$(date."+%Y.%m.%d")
                      back_up= "Backup"
                      new_file=$filename.$back_up.$current_time
                      echo "New file name is:" "$new_file"
                      cp $new_file $HOME 

              else 
                      echo "file does not exists"
              fi 
done 
                    ;;
         2) echo "Program Terminated" 
                 exit;;
esac

ユーザーが入力したスクリプトファイルをバックアップし、新しい拡張日付とバックアップとしてホームディレクトリに保存し、ファイルが存在することを確認するシェルスクリプトを作成する必要があります。最初の部分は正しく機能しているようですが、次のメッセージが表示されますcp:cannot stat no file or directory

ベストアンサー1

引用符、フレーズ、Kali-linuxタグはここでは関係がなく、Kaliは経験豊富なユーザーのためであるため、不適切であるという事実などのコメントは無視しましょう。

#!/bin/bash 
echo "Menu" 
echo "1. Backup file"
echo "2. Quit" 
echo "Enter Choice" 
read Choice

したがって、今あなたのオプションは12または私たちが無視している他の多くの入力)の一つです。

case "$Choice" in 
       1) while : 
               echo "Enter file name" 
               read file name 
               do 

2つの変数fileの合計を読みましnameたが、スクリプトの残りの部分では2つの変数の1つを使用しません。意味するものは次のとおりです。

       (1) while read -p "Enter file name" filename ; do
            

if [ -f $filename]filenameスクリプトは空であるため、常にtrueです。filename代わりに読むと、file name結果は次のようになります。

bash: [: missing `]'

前にスペースを挿入する必要があります]。 (引用も可能)

               if [ -f "$filename" ] ; then
                      current_time=$(date "+%Y.%m.%d")
                      back_up="Backup"
                      new_file="$filename.$back_up.$current_time" # quotes
                      echo "New file name is: $new_file"
                      cp $new_file $HOME 

ファイル名(例:)を入力しており、その名前がホームディレクトリにfooコピーされています。foo.Backup.2021.03.15ファイルが存在しますか?おそらくそうではありません。メッセージが届いたので、 cp: cannot stat foo.Backup.2021.03.15: No such file or directoryコピーしたいかもしれませんfoo

cp "$filename"  "$HOME/$new_file"

cpファイル名を見ると、スクリプトでエラーが見つかります。 Echosはエラーを見つけるのに最適です。

                   echo "Copying $filename to $HOME/$new_file"
                   cp "$filename"  "$HOME/$new_file"
              else 
                      echo "file does not exists"
              fi 
            done 
             ;;

を使用してこのwhileループを終了する必要があります^D。 2番目のCaseステートメントがループを終了すると予想していないことを願っています。

         2) echo "Program Terminated" 
                 exit;;
esac

お役に立てば幸いです。

おすすめ記事