Ich möchte mir ein Script bauen z.B xdialog

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Ich möchte mir ein Script bauen z.B xdialog

Beitrag von DEBIANUNDANDREAS » 13.08.2013 13:37:05

Hallo liebes Forum, Mitglieder und Leser dieses Thema.
Ich möchte mir ein Script bauen, habe aber keine Erfahrung, das Script sollte prüfen>>>
if xdialog (der Befehl) existiert dann echo "Der Befehl xdialog ist installiert" ansonsten "der Befehl xdialog ist nicht installiert" dann sudo apt-get install dialog

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^An dieser Stelle weiss ich nicht, wie es funktionieren soll, der passende Code fehlt.
Wer kann mir bei der Erstellung meines gewünschten Scripts helfen?

Benutzeravatar
hikaru
Moderator
Beiträge: 13909
Registriert: 09.04.2008 12:48:59

Re: Ich möchte mir ein Script bauen z.B xdialog

Beitrag von hikaru » 13.08.2013 13:51:34

which gibt dir den Pfad zum Binary (oder alias) eines Befehls aus. Falls es nichts findet spuckt es ein "Command not found." aus:

Code: Alles auswählen

~: which xdialog
xdialog: Command not found.
Zusammen mit grep lässt sich daraus eine leichte boolsche Prüfung bauen:

Code: Alles auswählen

~: which xdialog | grep -c 'Command not found'
1
Als Gegenbeispiel für etwas Vorhandenes:

Code: Alles auswählen

~: which ls | grep -c 'Command not found'
0
@Meillo, Cae, wer auch immer:
Elegantere Lösungen nehme ich gern! :)

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: Ich möchte mir ein Script bauen z.B xdialog

Beitrag von 4A4B » 13.08.2013 13:57:47

Man könnte auch einfach den return Wert von which auswerten

Code: Alles auswählen

#!/bin/bash

if which xdialog >/dev/null; then
   echo "Der Befehl xdialog ist installiert"
else
   echo "Der Befehl xdialog ist nicht installiert"
fi

Edit: shebang-Zeile eingefügt
Zuletzt geändert von 4A4B am 13.08.2013 15:20:31, insgesamt 1-mal geändert.

Benutzeravatar
hikaru
Moderator
Beiträge: 13909
Registriert: 09.04.2008 12:48:59

Re: Ich möchte mir ein Script bauen z.B xdialog

Beitrag von hikaru » 13.08.2013 14:02:40

Da habe ich die Manpage wohl falsch interpretiert:
RETURN VALUE
Which returns the number of failed arguments, or -1 when no `programname´ was given.
Was so ein Komma doch ausmachen kann. ;)

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: Ich möchte mir ein Script bauen z.B xdialog

Beitrag von 4A4B » 13.08.2013 14:16:20

Sorry, ich meinte natürlich den Exit Status, nicht den Return Value

Edit: und ich habe anscheinend auch eine andere Man-Page:
EXIT STATUS
0 if all specified commands are found and executable

1 if one or more specified commands is nonexistent or not executable

2 if an invalid option is specified

Benutzeravatar
hikaru
Moderator
Beiträge: 13909
Registriert: 09.04.2008 12:48:59

Re: Ich möchte mir ein Script bauen z.B xdialog

Beitrag von hikaru » 13.08.2013 14:23:13

4A4B hat geschrieben:Edit: und ich habe anscheinend auch eine andere Man-Page:
Ich sitz hier vor einer Suse. :roll:

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: Ich möchte mir ein Script bauen z.B xdialog

Beitrag von 4A4B » 13.08.2013 14:36:17

Ja, ich habe die Manpage auch grad im Netz gefunden:

http://unixhelp.ed.ac.uk/CGI/man-cgi?which

Die Debian- und Suse-Versionen unterscheiden sich ja schon beträchtlich. Wenn which bei Erfolg eine 0 zurückgibt, sollte mein if Konstrukt aber auch unter Suse funktionieren.

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Ich möchte mir ein Script bauen z.B xdialog

Beitrag von DEBIANUNDANDREAS » 13.08.2013 15:10:51

Ich fand da noch einen Fehler.
http://nopaste.debianforum.de/37337
Und was nun?

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: Ich möchte mir ein Script bauen z.B xdialog

Beitrag von 4A4B » 13.08.2013 15:18:39

Was für einen Fehler (Fehlermeldung)?

Das vollständige Script muss am Anfang noch eine Shebang-Zeile haben, falls du das meinst:

Code: Alles auswählen

#!/bin/bash

Benutzeravatar
hikaru
Moderator
Beiträge: 13909
Registriert: 09.04.2008 12:48:59

Re: Ich möchte mir ein Script bauen z.B xdialog

Beitrag von hikaru » 13.08.2013 15:21:14

DEBIANUNDANDREAS hat geschrieben:Und was nun?
Nun korrigierst du deinen Tippfehler und fügst in dieser Zeile noch ein x hinzu:

Code: Alles auswählen

if which dialog >/dev/null;

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Ich möchte mir ein Script bauen z.B xdialog

Beitrag von Cae » 13.08.2013 19:20:24

Sofern which offensichtlich nicht wirklich zuverlaessig auszuwerten ist, kann man die Funktionalitaet auch nachbauen:

Code: Alles auswählen

mywhich() {
	[ 0 = $# ] && return 2;
	w=;
	safeIFS="$IFS"; IFS=:;
	for p in $PATH; do
		[ -x "$p/$1" ] && {
			w=1;
			break;
		};
	done;
	IFS="$saveIFS";
	[ "$w" ] || return 1;
}
Das klappert den $PATH ab und guckt, ob das uebergebene Argument ausfuehrbar ist. Achtung, mywhich /bin/true deshalb false (ist das gut so?).

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

inne
Beiträge: 3289
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Ich möchte mir ein Script bauen z.B xdialog

Beitrag von inne » 13.08.2013 20:45:01

Was ist das für ein Skript, das xdialog installieren soll? Würde mindestens das Installieren weglassen.

Anstonsten ein Ansatz: set -e dann bricht das Skript bei Fehler ab und die Fehlermeldung xdialog: Kommando nicht gefunden sollten reichen.

Code: Alles auswählen

#!/bin/sh
set -e

...
MfG
inne

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Ich möchte mir ein Script bauen z.B xdialog

Beitrag von DEBIANUNDANDREAS » 14.08.2013 05:45:22

andy@debian:~$

Code: Alles auswählen

set --h
bash: set: --: Ungültige Option
set: Gebrauch: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]

andy@debian:~$

Code: Alles auswählen

man set 
Kein Handbucheintrag für set vorhanden

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: Ich möchte mir ein Script bauen z.B xdialog

Beitrag von 4A4B » 14.08.2013 07:28:17

set ist ein Shell Builtin der bash. Informationen zu Shell Builtins kannst du dir mit help anzeigen lassen (siehe auch "help help")

Code: Alles auswählen

help set

Benutzeravatar
Phineas
Beiträge: 354
Registriert: 20.06.2012 20:26:19

Re: Ich möchte mir ein Script bauen z.B xdialog

Beitrag von Phineas » 14.08.2013 10:26:11

Cae hat geschrieben:Sofern which offensichtlich nicht wirklich zuverlaessig auszuwerten ist ...
Spricht irgendwas gegen type?

Code: Alles auswählen

type xdialog &>/dev/null && echo gibt es

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Ich möchte mir ein Script bauen z.B xdialog

Beitrag von Cae » 14.08.2013 19:41:53

Phineas hat geschrieben:
Cae hat geschrieben:Sofern which offensichtlich nicht wirklich zuverlaessig auszuwerten ist ...
Spricht irgendwas gegen type?
Mal davon abgesehen, dass ich oben nicht dran gedacht habe... ;) noe, vermutlich nicht. Es wuerde zwar auch bei anderen shell builtins mit ret 0 beenden, aber die heissen garantiert nicht xdialog. Aaaaber, was mir gerade auffaellt: Shell-Funktionen werden gematcht:

Code: Alles auswählen

$ foo(){:;}
$ type foo
foo is a shell function
$ echo $?
0
Diese waere aber trotzdem irgendwie ausfuehrbar und vielleicht zum Debuggen ganz nuetzlich (z.B.

Code: Alles auswählen

xdialog(){date "+%F.%T +xd"; /usr/bin/xdialog; date "+%F.%T /xd";}
).

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Antworten