Einfaches Skript bzw. Returnwerte abfragen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Homer
Beiträge: 126
Registriert: 25.10.2002 16:30:28
Wohnort: Karlsruhe

Einfaches Skript bzw. Returnwerte abfragen

Beitrag von Homer » 14.11.2005 18:50:31

Hallo Leute,

ich möchte ein kleines Skript erstellen um verschiedene Arten von Debianpakete bauen zu können. Ich habe keine Ahnung von Shellscripts, habe aber bei der linuxfibel und der Bash Programming Howto schon ein bißchen nachgelesen. Dennoch reichts nicht für eine einfache Returnwertabfrage :oops:

Code: Alles auswählen

#!/bin/sh
set -xv #set verbose mode on
# make common debian package for dpkg
cp debian/control.dpkg debian/control
dpkg-buildpackage -rfakeroot
if [$? -ne 0]; then
 	echo "dpkg build failed"
	exit $?
fi
mkdir -p ../dpkg
mv ../*.deb ../dpkg/

# make special package for application installer
cp  debian/control.installer debian/control
dpkg-buildpackage -rfakeroot
if [$? -ne 0]; then
	echo "installer build failed"
	exit $?
fi
mkdir -p ../installer
mv ../*.deb ../installer/

# delete control file again
rm debian/control
#everything was successful -> return zero
exit 0
In den Zeilen, in denen ich den Returnwert abfrage, bekomme ich immer die Meldung

Code: Alles auswählen

./testscript.sh: line xyz: [0: command not found
Ich dachte das der Vergleich aber richtig ist, steht zumindest so in der manpage zu test.
So, und jetzt kommt Ihr! :)

Danke schon mal.

Ciao,

Timo
"Sie können auch Ihr Geld aus dem Windows rauswerfen"

Benutzeravatar
Cloonix
Beiträge: 589
Registriert: 20.11.2004 10:42:24
Wohnort: München
Kontaktdaten:

Beitrag von Cloonix » 14.11.2005 19:13:18

Ganz grosser Shell Skript Fehler!!!

Code: Alles auswählen

if [ "$?" -ne "0" ]; then
Man beachte die Leerzeichen. Das braucht sh,bash,ksh
proud to be 100% M$ free (except X300T)
http://claus.freakempire.de
http://debian.freakempire.de

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 14.11.2005 19:40:23

und woran das liegt?

Daran:

Code: Alles auswählen

check@tne:~$ which [  
/usr/bin/[
check@tne:~$
und da es ein Befehl ist (das [ ist der Befehl) darfst du natürlich nicht DIREKT an den Befehl etwas ranschreiben ;-)
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
Cloonix
Beiträge: 589
Registriert: 20.11.2004 10:42:24
Wohnort: München
Kontaktdaten:

Beitrag von Cloonix » 14.11.2005 19:42:39

Savar hat geschrieben:

Code: Alles auswählen

check@tne:~$ which [  
/usr/bin/[
check@tne:~$
8O

Das wusste ich auch noch nicht. *lach*
proud to be 100% M$ free (except X300T)
http://claus.freakempire.de
http://debian.freakempire.de

Benutzeravatar
Homer
Beiträge: 126
Registriert: 25.10.2002 16:30:28
Wohnort: Karlsruhe

Beitrag von Homer » 15.11.2005 12:16:37

Ach ja, jetzt versteh ich das. [ ist ein anderer Name für test. Erkennt man auch wenn man

Code: Alles auswählen

man [
eingibt.

Und das mit dem exit $? in den if Abfragen ist auch keine gute Idee, ich muß nämlich vorher den Returnwert abspeichern, da $? immer von dem Returncode der jeweils letzten Anweisung überschrieben wird. So also:

Code: Alles auswählen

#!/bin/sh
# set -xv #set verbose mode on
# make common debian package for dpkg
cp debian/control.dpkg debian/control
dpkg-buildpackage -rfakeroot
$retcode = $?
if [ "$retcode" -ne "0" ]; then
	echo "dpkg build failed"
	exit $retcode
fi
mkdir -p ../dpkg
mv ../*.deb ../dpkg/

# make special package for application installer
cp  debian/control.installer debian/control
dpkg-buildpackage -rfakeroot
$retcode = $?
if [ "$retcode" -ne "0" ]; then
	echo "installer build failed"
	exit $retcode
fi
mkdir -p ../installer
mv ../*.deb ../installer/

# delete control file again
rm debian/control
#everything was successful -> return zero
exit 0
Aber sonst tuts. Vielen, vielen Dank! :D

Ciao,

Homer
"Sie können auch Ihr Geld aus dem Windows rauswerfen"

Antworten