Benötige dringend Hilfe beim Bash Skript

Ugeen

New Member
Hallo zusammen,

ich habe letzte Woche zusammen mit einem Kollegen folgendes Bash Script erstellt:

Code:
#!/bin/bash -x
rm /drives/c/RBH/file.txt
touch /drives/c/RBH/file.txt
file=/drives/c/RBH/file.txt
for i in $(find RBH type f); do
echo $i
if [ -n "$(echo $i | grep '.arc')" ];then
echo "Datei:""$i" >>$file 
cat "$i" >> $file 
echo -e "----------------------------------------\n">> $file
#echo -e "\n" >>$file 
else echo "Datei:""$i" >>$file 
sed -n '1p' "$i" >>$file
sed -n '$p' "$i" >>$file
echo -e "----------------------------------------\n">>$file
fi
done
unix2dos $file

In diesem Scirpt checkt er in den Ordner RBH auf Dateien aus und behandelt die .arc Dateien separat und packt den gesamten Inhalt der .arc Dateien in eine Textdatei und von dem rest nur die erste und letzte Zeile.

Dieses Script habe ich nun leicht abgeändert. Er soll jetzt nur die Dateien nehmen dessen Endung EGAM lautet und mir davon die erste und letzte Zeit ausgeben und in eine txt Datei packen. Dabei gibt er mir ständig ein Fehler in line 5 aus. Woran kann das liegen?

Code:
#!/bin/bash -x
#rm /drives/c/RBH/file.txt
#touch /drives/c/RBH/file.txt
file=/drives/c/RBH/file.txt
[B]for i in $(find RBH type f); do[/B]
echo $i
if [ -n "$(echo $i | grep '.EGAM')" ];then
echo "Datei:""$i" >>$file 
sed -n '1p' "$i" >>$file
sed -n '$p' "$i" >>$file
echo -e "----------------------------------------\n">>$file
fi
done
unix2dos $file

Ich würde mich freuen, wenn mir schnell helfen könnte.

Viele Grüße Ugeen
 
Code:
#!/bin/bash
file="test/output.txt"
for i in test/*
do
	if [[ $i = *.END ]]
	then
		echo "Datei:""$i" >>$file 
		sed -n '1p' "$i" >>$file
		sed -n '$p' "$i" >>$file
		echo -e "----------------------------------------\n">>$file
	fi
done

So in etwa sollte das tun. Grundsätzlich: vermeide externals, wenn es auch mit Bash built-in Funktionen geht.

Lesetipp: http://mywiki.wooledge.org/BashPitfalls

oh und - der find aufruf ist fehlerhaft, weil vor das type ein "-" muss: `find RBH -type f`
 
Hier mal der alte Fehler
Code:
+ file=$'/drives/c/RBH/file.txt\r'
./egamout.sh: line 5: syntax error near unexpected token `$'do\r''
'/egamout.sh: line 5: `for i in $(find RBH type f); do

@dermarlo Ich habe mal Dein Script genommen und es angepasst und habe dabei folgenden Fehler bekommen

Code:
./neu.sh: line 4: syntax error near unexpected token `$'do\r''
'/neu.sh: line 4: `do

mit dem -type in meinem alten Scipt hat es leider auch nicht funktioniert.

EDIT: Vielleicht ist es noch wichtig zu sagen, dass ich das ganze nicht unter Lunux sondern unter Windows mit dem Editor MobaXterm mache.
 
Last edited by a moderator:
Das script funktioniert bei mir, ich habe es getestet bevor ich es gepostet habe.

das "\r" in den Fehlermeldungen weist darauf hin, dass du CR/LF line terminators anstelle von LF (unix standard) nutzt.

mit welchem editor speicherst du das script ? Versuchs mal mit dos2unix :)
 
Ich benutze unter Windows den Editor MobaXterm. Damit hat das alte Script auch funktioniert und editiert hatte ich es immer im Windows Editor ging schneller für mich als Windowsnutzer :). Wo füge ich das dos2unix ein am Anfang? Habe am Ende meines Scriptes ja immer unix2dos damit es unter Windows lesbar ist.

EDIT: Habe gerade mit dem Befehl
Code:
tr -d '\r' < script.sh > script2.sh
diesen Fehler beseitigt. Jetzt bekomme ich den Fehler unix2dos:
Code:
can't open '/drives/c/RBH/neu.txt': No such file or directory
.

EDIT:2 OK jetzt funktioniert es. Endlich :-). Vielen Dank für die Hilfe!!!
 
Last edited by a moderator:
Back
Top