第26行:语法错误:意外的文件结束

时间:2017-09-25 21:36:03

标签: unix awk

    #!/bin/bash
source_dir="~/p6_tmp"
target_dir="~/trash"
if [ ! -d ${target_dir} ]; 
then
 mkdir target_dir
else 
echo "Displaying the contents of current directory"
for entry in "$source_dir"/*
do
  echo "$entry" 
echo "Please enter the filename you wish to trash:"
read filename
if [ -f ${source_dir}/${filename} ]
then
    if [ -f ${target_dir}/${filename} ]
    then
        mv "${source_dir}/${filename}" "${target_dir}/${filename}_bak"
    else
        mv "${source_dir}/${filename}" "$target_dir"
    fi
else
    echo "The file ${source_dir}/${filename} does not exist"
fi

问题是: 使用bourne shell / bin / sh编写满足以下规范的名为trash的实用程序:

用法:trash -l | -p | {filename} *

trash是rm实用程序的替代品。垃圾桶不是删除文件,而是将文件移动到主目录中名为.trash的子目录中。当存在要移动的有效文件时,如果.trash不存在,则会创建该文件。如果.trash存在,则-l选项列出当前内容。如果.trash存在,则-p选项将删除目录及其中的所有文件。

这段代码有什么问题?意外文件在哪里,我会错过关闭一个文件还是我有额外的文件?我试图解决,但它不让我做任何事情。 谢谢

1 个答案:

答案 0 :(得分:0)

正如Ed Morton先生所说,由于EOF错误即将到来,所以当你正确地缩进你的代码时,你就会知道罪魁祸首在哪里。因此,如果块没有用fi关闭,那么首先。

#!/bin/bash
source_dir="~/p6_tmp"
target_dir="~/trash"
if [ ! -d ${target_dir} ]; 
then
    mkdir target_dir
else 
    echo "Displaying the contents of current directory"
    for entry in "$source_dir"/*
    do
      echo "$entry" 
      echo "Please enter the filename you wish to trash:"
      read filename
    if [ -f ${source_dir}/${filename} ]
    then
      if [ -f ${target_dir}/${filename} ]
      then
        mv "${source_dir}/${filename}" "${target_dir}/${filename}_bak"
      else
        mv "${source_dir}/${filename}" "$target_dir"
      fi
    else
      echo "The file ${source_dir}/${filename} does not exist"
    fi
fi  ## <---- This is the one which I added newly