Inhalt einer Variable als Programmaufruf starten

Mtgxyz

Mtgxyz

Grünschnabel
Also, ich möchte gerne ein Shell-Script schreiben, das je nach Usereingabe ein Anderes Shell-Script (bzw. Programm) aufruft und dann den Return-Code kommentiert. (So können besser Fehler gefunden Werden)
Mein Code:
Code:
	echo "Jetzt wird $1 aufgerufen."
	echo "Wieviele Parameter?"
	read para
	$count = 0
	$appa = $1
	while $count - le $para
	do
		$count = $count+1
		echo "Parameter $count:"
		read buff
		$appa .= " $buff"
	done
#CODE für Programmaufruf
 
Und was ist die Frage? Für welche Shell soll der Code sein?

Verstehe ich das richtig? Du willst ein Shell-Script, dass die Fehler von anderen Shellscripten auswertet und Du glaubst ernsthaft, dass die Fehler so besser gefunden werden können?

Ich bin zutiefst verwirrt.
 
Und was ist die Frage? Für welche Shell soll der Code sein?
Bash
Verstehe ich das richtig? Du willst ein Shell-Script, dass die Fehler von anderen Shellscripten auswertet und Du glaubst ernsthaft, dass die Fehler so besser gefunden werden können?
nicht die Fehler Anderer Programme, sondern den Exitcode (Also wenn es einen Fehler Gibt, dann z.B. Exitcode 2). So gibt es keine Kryptischen Fehlerbeschreibungen die u.u keiner lesen kann.
 
Zuletzt bearbeitet:
Meinst Du nicht auch, dass es haarsträubend umständlich ist, den Benutzer zuerst nach der Anzahl der Parameter zu fragen, um danach jeden Parameter einzeln abzufragen? Wäre das Folgende nicht um Quadratklassen einfacher?
Code:
#!/bin/bash
echo "Aufgerufen wird: $@"
$@
echo "Der Returncode war: $?"


Zwei Tests damit (test.sh):
Code:
sproede@linux:~> test.sh echo 1 2 3
Aufgerufen wird: echo 1 2 3
1 2 3
Der Returncode war: 0

sproede@linux:~> test.sh cat gibsgaanich
Aufgerufen wird: cat gibsgaanich
cat: gibsgaanich: Datei oder Verzeichnis nicht gefunden
Der Returncode war: 1
 
hallo kann mir vielleicht einer Helfen
Und zwar muss ich 5 IP-Adressen druch ping testen, ob diese erreichbar sind. Und noch was mit shift machen.
nun habe ich schon was fertig gestellt, jedoch funktioniert es nicht so wie gewünscht.
#! /usr/bin/sh

IP1="139.6.57.1"
IP2="139.6.57.8"
IP3="139.6.57.11"
IP4="139.6.57.63"
IP5="139.6.57.66"


echo Ping-Test beginnt...
echo

for online in $IP1 $IP2 $IP3 $IP4 $IP5;
do
ping -c1 $online;

if [$? != 0]

then
echo"$online ist offlineline: $online"
else
echo "$online ist online : $online"

fi
done

echo
echo ...und ist abgeschlossen!
 
Hallo.
Bitte versuche später, Code in Code-Tags zu posten. Das dient der Übersicht!
Ich würde behaupten, du hast in der if-Abfrage die Leerzeilen zwischen Klammern und Variablen/Werten vergessen.
Code:
#!/bin/sh

IP1="google.de"
IP2="gmx.de"
IP3="unixboard.de"
IP4="testefwefv.de"
IP5="cia.gov"


echo Ping-Test beginnt...
echo

for online in $IP1 $IP2 $IP3 $IP4 $IP5; do
        ping -w1 -c1 $online >nul 2>&1;

        if [ $? != 0 ]; then
                echo "$online ist offline"
        else
                echo "$online ist online"
        fi

done

echo
echo ...und ist abgeschlossen!

Code:
test@oglxvmtest01:~$ ./test.sh 
Ping-Test beginnt...                                                                                       
                                                                                                           
google.de ist online                                                                                       
gmx.de ist online                                                                                          
unixboard.de ist online                                                                                    
testefwefv.de ist offline                                                                                  
cia.gov ist offline                                                                                        
                                                                                                           
...und ist abgeschlossen!                                                                                  
test@oglxvmtest01:~$

Desweiteren habe ich eine Wait für den Ping von einer Sekunde eingebaut und die Ausgabe von Ping in nul umgeleitetet, damit die Ausgabe übersichtlich bleibt.
 
Vielen, vielen Dank für deine Lösung/Antwort,
das super nett von dir.
Funktioniert alles! :)
Noch eine Frage wo baue ich, den ein shift ein, brauch ich das überhaupt??
Ist in der Aufgabenstellung vorgegeben.
 
Die Sache mit "shift" lässt eine andere Aufgabenstellung vermuten. Du sollst dem Script vermutlich beim Aufruf die IPs als Parameter mitgeben.

Die Sache mit ping ist gelöst, also poste ich Dir nur noch, wie Du die Parameter mit Hilfe von "shift" abarbeiten lässt und Du ersetzt das "echo" im Code entsprechend.

Code:
#!/bin/sh
while [ "$1" ]; do
    echo "$1"
    shift
done


Der Script wird dann also so aufgerufen:
Code:
sproede@linux:~> SCRIPT a b c d e
a
b
c
d
e
 
Hi!

Danke schon mal für deine Hilfe, aber die genaue Aufgabenbeschreibung lautet:
Schreiben sie ein Shell Script, das aus einer Liste an Variablen mit IP-Adressen in einer
Schleife den Online-Status der Gegenstelle prüft.

Jetzt habe ich die Aufgabe gelöst"wie es oben steht", jedoch ohne shift.
 
Zuletzt bearbeitet:
So langsam komme ich mir ein bisschen ver**** vor...
Ich denke, du solltest nun genug Input bekommen haben, damit du dein Script auch selbst schreiben kannst.

Falls nicht, dann solltest du dir z.B. das oder das anschauen.


Sorry für meinen Ton, aber ich denke, ein Forum ist da, um Probleme zu lösen und nicht alle gestellten Aufgaben anderer Leute zu lösen.
 
Ich habe die Aufgabe selber gelöst, so ist es nicht.
Wollte nur wissen, wie man diese mit shift löst.
Was shift macht und der Hinweis, ist mir auch klar,
jedoch weiß ich nicht wie ich die Parameter darein kriege..
Krieg ich auch allein irgendwie allein hin...
 
Dann solltest Du evtl. #8 nochmals genauer lesen und zu verstehen versuchen.
 

Ähnliche Themen

script sshpass

Textdatei zeilenweise in durchnummerierte Variablen schreiben

Datei auslesen und fund per MAil versenden.

Wie komme ich an den Inhalt des Inhalts einer Variable?

continue in Schleife einbauen

Zurück
Oben