2017-09-25 5 views
-1
#!/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 

Frage: Verwenden der Bourne-Shell/bin/sh schreiben das Dienstprogramm aufgerufen Müll, das die folgenden Spezifikationen erfüllt:Zeile 26: Syntaxfehler: unerwartete Dateiende

Usage: trash -l | -p | {filename} *

Müll ist ein Ersatz für das Dienstprogramm rm. Anstatt Dateien zu entfernen, verschiebt der Papierkorb Dateien in ein Unterverzeichnis namens .trash in Ihrem Home-Verzeichnis. Wenn es eine gültige Datei zum Verschieben gibt, wenn .trash nicht existiert, wird sie erstellt. Wenn .trash existiert, listet die Option -l den aktuellen Inhalt auf. Wenn .trash existiert, entfernt die Option -p das Verzeichnis und alle darin enthaltenen Dateien.

Was ist falsch an diesem Code? Wo ist die unerwartete Datei, vermisse ich eine Datei zu schließen oder habe ich extra fi? Ich habe versucht zu beheben, aber es lässt mich nichts tun. Danke

+4

Fix Ihre Einrückung und das Problem wird sofort offensichtlich sein und dann werden Sie fertig sein. –

+0

Erfahren Sie, wie Sie Code in http://shellcheck.net ausschneiden/einfügen, bevor Sie hier posten. Viel Glück. – shellter

Antwort

0

Wie Ed Morton Sir schlug auch, da EOF-Fehler kommt so, wenn Sie richtig einrücken Ihren Code werden Sie wissen, wo der Täter ist. So sehr zuerst, wenn Block nicht mit fi geschlossen wurde.

#!/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 
Verwandte Themen