„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;

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.


2

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.