これを解決するには?
ファイルのコピーを作成します。
- ファイルは現在のディレクトリ(ユーザーが指定したファイル名)になければなりません。
- ユーザーが指定した宛先ディレクトリの名前。
これが私がどれだけ離れてきたかです:
echo "Enter the name of the file:"
read filename
cp -r /home/$FILE ;;
少しだけ情報を追加すると、全体の練習の基礎になります。
スクリプトは、次のオプションを含むメニューを提供する必要があります。
1. To create a backup copy of a script file.
バックアップコピー名には、スクリプト名の後にバックアップを含める必要があり、日付スタンプを表示する必要があります(例:work3Script_backup_10_11_2015)。
これは、ホームディレクトリの環境変数を使用してホームディレクトリに保存する必要があります。
スクリプトはファイルが存在し、通常のファイルであるかどうかを確認する必要があります。そうでない場合、スクリプトは、有効なファイル名が入力されるまでユーザーがファイル名を再入力できるようにする必要があります。
2. To create a date stamped log file called e.g. log_file_10_11_2015
containing
> A list of who is logged into the system
> The disk usage and
> Your currently running processes.
> The file should be saved to an existing directory called log_dir which
should
be situated off your home directory
3. To create a copy of a file.
ファイルは現在のディレクトリ(ユーザーが指定したファイル名)になければなりません。
ユーザーが指定した宛先ディレクトリの名前。
スクリプトはファイルが存在し、通常のファイルであるかどうかを確認する必要があります。そうでない場合、スクリプトは、有効なファイル名が入力されるまでユーザーがファイル名を再入力できるようにする必要があります。
スクリプトは、ターゲットディレクトリが存在することを確認する必要があります。そうでない場合、スクリプトは、有効なディレクトリが入力されるまで、ユーザーがターゲットディレクトリに再び入ることを許可する必要があります。
私が作ったメニューはこんな感じです。
#!/bin/bash
while true
do
echo "=============================="
echo "Menu"
echo "=============================="
echo "Option 1 Backing up files: "
echo "Option 2 Date stamped log file: "
echo "Option 3 Create a copy of a file: "
echo "Option 4 Moving a file to place giving by the user: "
echo "Enter q to quit the menu: "
echo -e "\n"
echo -e "Enter your option: \c"
read answer
case "$answer" in
1) while true ; do
echo "Enter the file name:"
read filename
if [ -f "$filename" ]; then
echo "The file exists."
break
else
echo "File doesn't exist."
fi
done
FILE=$(date +"outcome3_backup_%d_%m_%y.sh")
touch /home/robert/$FILE ;;
2)FILE=$(date +"log_file_%d_%m_%y.txt")
touch /home/robert/log_dir/$FILE
echo "Users online: " > /home/robert/log_dir/$FILE
(users) >> /home/robert/log_dir/$FILE
echo "Running proccesses:" >> /home/robert/log_dir/$FILE
ps -a >> /home/robert/log_dir/$FILE
echo "Available disk space:" >> /home/robert/log_dir/$FILE
df --total -h|head -n 1 >> /home/robert/log_dir/$FILE
df --total -h|tail -n 1 >> /home/robert/log_dir/$FILE ;;
3) ;;
q) exit ;;
esac
done
答え1
In Sorva, J. (2018) 誤解と初心者プログラマー。 In:Barendsen、E.、Schulte、S.、Sentance、S.(Eds。)コンピュータサイエンス教育:学校での教育と学習の観点。ロンドン, Bloomsbury, pp. 171-188。コンピュータがコンピュータプログラムを解釈する方法について広く知られている誤解がある。
M18:プログラムは自然な会話である程度文章として解釈されます。実用的な目的のために、コンピュータまたはプログラミング環境はプログラマの意図を推論することができます。たとえば、学習することなく「明らかに」欠落している情報を埋めることができます。
IE変数名は最初の例とは異なります。コンピュータはそれらをまったく異なるものと見なしています。
echo "Enter the name of the file:"
read filename
cp -r /home/$FILE
FILE
:とは異なり、filename
大文字と小文字が異なります。
注:変数名にはすべて大文字を使用しないでください。shellcheck
エラーを見つけるためにスクリプトを渡します。
住宅検査
echo '#!/bin/bash
echo "Enter the name of the file:"
read filename
cp -r /home/$FILE' | shellcheck /dev/stdin
商品を返す
In /dev/stdin line 3:
read filename
^-- SC2162: read without -r will mangle backslashes.
^-- SC2034: filename appears unused. Verify use (or export if used externally).
In /dev/stdin line 4:
cp -r /home/$FILE
^-- SC2225: This cp has no destination. Check the arguments.
^-- SC2086: Double quote to prevent globbing and word splitting.