外壳检查

外壳检查

如何解决这个任务呢?

创建文件的副本。

  • 该文件应该位于您当前的目录中(由用户指定的文件名)
  • 由用户指定的目标目录名称。

这就是我已经走了多远:

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.

相关内容