#!/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选项将删除目录及其中的所有文件。
这段代码有什么问题?意外文件在哪里,我会错过关闭一个文件还是我有额外的文件?我试图解决,但它不让我做任何事情。 谢谢
答案 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