#!/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
したがって、今あなたのオプションは1
(2
または私たちが無視している他の多くの入力)の一つです。
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
お役に立てば幸いです。