如何解决这个任务呢?
创建文件的副本。
- 该文件应该位于您当前的目录中(由用户指定的文件名)
- 由用户指定的目标目录名称。
这就是我已经走了多远:
echo "Enter the name of the file:"
read filename
cp -r /home/$FILE ;;
只是添加更多信息,这就是完整练习的基础:
该脚本应提供一个包含以下选项的菜单:
1. To create a backup copy of a script file.
备份副本的名称应在脚本名称后包含 backup 并带有日期标记,例如 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
在 Sorva, J. (2018) 误解和初学者程序员中。见:Barendsen, E.、Schulte, S.、Sentance, S.(编)计算机科学教育:学校教与学的观点。伦敦,布鲁斯伯里,第 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.