„Błąd składni w pobliżu nieoczekiwanego tokena„ $ '\ r' '”w skrypcie powłoki [zamknięty]

2

Piszę skrypt, czy pojawia się błąd w wierszach 2-3. Błąd jest drukowany w następujący sposób:

./ex6.sh: line2: $'\r': command not found
./ex6.sh: line3: syntax error near unexpected token '$'\r''
./ex6.sh: line3: 'fund ()

Plik nazywa się ex6.sh. Czy ktoś może udzielić wskazówek, dlaczego ten błąd występuje?

#!/bin/sh

func () 
{
if [ "$1" == "" ]; then
echo "Default";
for i in `find` ; 
do
    if [ -d $i ]; then
        echo $i "is a directory";
    fi
    if [ -f $i ]; then
        if [ "$i" != "./script.sh" ]; then
            echo $i "is a file";        
        fi
    fi
done
fi

if [ "$1" == "--long" ]; then
echo "--long";
for i in `find` ; 
do
    if [ -d $i ]; then
        echo $i "is a directory";
    fi
    if [ -f $i ]; then
        echo $i "is a file";        
    fi
done
fi

if [ "$1" == "--rm" ]; then
echo "--rm";
for i in `find` ; 
do
    if [ -d $i ]; then
        echo $i "is a directory";
    fi
    if [ -f $i ]; then
        echo $i "is a file";        
    fi
done
fi
}

getArgs () {
if [ "$1" == "--long" ]; then
    echo "got the first param $1";
else
    if [ "$1" == "--rm" ]; then
        echo "got the second param $1";
    else
        if [ "$1" == "" ]; then
            echo "got default param";
        else
            echo "script.sh: unknown option $1";
            exit;
        fi  
    fi
fi

}

getArgs $1;
#ARGS=$1;

func $1;
Eric
źródło
1
A jakie jest twoje pytanie Poświęć przynajmniej 20 sekund, aby dowiedzieć się, jak wstawić sformatowany kod do swojego postu na tej stronie.
Daniel Beck
Twój skrypt prawdopodobnie nie obsługuje nazw plików zawierających spacje. Każda biała spacja jest uważana za dzielnik w kolekcjach (np. findWartości zwracane), a nie tylko nowe linie.
Daniel Beck
1
Właśnie to miałem na myśli przez 20 sekund: to jest moje oszacowanie, ile czasu zajmie ci naciśnięcie linku / przycisku znaku zapytania, a następnie kodu i przeczytanie, że musisz wciąć wiele wierszy dla wstępnie sformatowanego tekstu.
Daniel Beck
1
Cygwin to zestaw bibliotek i plików wykonywalnych. Nic nie mówi.
Ignacio Vazquez-Abrams
1
Edytuj swoje stare pytanie , nie publikuj nowego. Zrobiłem to już dla ciebie, ale pamiętaj o tym na przyszłość.
slhck

Odpowiedzi:

6

Użyj dos2unixlub odpowiedniego edytora tekstu, aby przekonwertować wszystkie podziały wiersza z systemu Windows \r\nna \n.

Daniel Beck
źródło
2

Sprawdź znak końca linii w pliku. Prawdopodobnie masz styl Windows ( CR+ LF) i powinieneś mieć styl Unix / Linux (tylko LF).

DavidEG
źródło