Bash-Anfänger bittet um Hilfe bei Skript-Pararmetern

Cazawhi

Geht ein
Registriert
13 Feb. 2016
Beiträge
357
Ort
im Funkloch
Wollte das mal nicht ins Linux-Forum packen, auch wenn es Linux-Scripting ist, sonst klugscheißert MetalWarrior wieder. :D
Auf jeden Fall möchte ich ein Script schreibe, was auf Pararmeter hört. Das $1 der eingegeben Pararmeter ist, ist mir schon klar, allerdings habe ich bis auf irgendwelche hässlich verschachtelten if-Abfragen, die am Ende eh nicht funktionieren, noch keine gute Möglichkeit gefunden, die Pararmeter abzugreifen und auszuwerten.
Kann mir da einer der Linux-Menschen mal helfen? Das Internet bringt irgendwie auch keine sinnvolle Lösung für mich. Das Script soll so ca. 3-4 Pararmeter kennen, und nur auf Pararmeter reagieren, und ohne sich einfach schließen.

Danke schonmal für eure Hilfe, ich weiß total noobige Frage. :D

LG Cazawhi
 
Könntest du vielleicht genauer schreiben, was das Script machen soll?
Um die hässlichen IF-Konstruktionen wirst du whsl nicht herum kommen.
 
  • Thread Starter Thread Starter
  • #3
Das Skript soll mit dem Pararmeter 'start' eine .jar ausführen, und mit dem Pararmeter 'stop' den Prozess der .jar wieder abschießen.
Und es soll noch den dritten/vierten Pararmeter 'load1' bzw. 'load2' haben, bei dem Konfigurationsdateien ausgetauscht werden, um zwei "Presets" zu haben.
 
Weiß nicht, was man da großartig verschachteln muss:
[src=bash]if [ "$2" == "load1" ]; then

elif [ "$2" == "load2" ]; then

fi

case $1 in
"start") …;;
"stop") …;;
"restart") …;;
*) echo 'whoops, syntax: start|stop|restart [load1|load2]';;
esac[/src]

Würde allerdings einführen und darauf prüfen und den Parameter nicht load1/load2 nennen sondern vielleicht einen Pfad zur Konfigurationsdatei mitgeben lassen. Dafür vielleicht einen Parameter "-c" mit nutzen.
 
  • Thread Starter Thread Starter
  • #5
Sehr cool, danke. Folgenden Fehler gibt's noch:
[src=text]init.sh: 8: [: load2: unexpected operator
init.sh: 10: [: load2: unexpected operator[/src]

//Edit: Alles gut, hab's rausgefunden, muss halt einfach mal mit bash statt mit sh executen XD
 
Zuletzt bearbeitet:
Könnte auch sein, dass das [kw][[/kw] vom Interpreter interpretiert wird, weil du doppelte genutzt hast – daher die einfachen Anführungszeichen in meinem Listing.

Aber ja, , damit das nicht plötzlich mit zsh oder ähnlichem interpretiert wird.
 
  • Thread Starter Thread Starter
  • #7
Bash-Shebang ist gesetzt, hab's aber aus gewohnheit mit sh gestartet, das war mein Fehler. :D

Ich möchte für den Stop-Befehl noch was machen. Der Plan ist, mit Grep die Prozess-ID vom Java-Prozess rauszufinden, und diesen zu killen.
Grep-Output (ps -ef |grep /usr/lib/jvm/):
[src=text]cazawhi 26636 26586 67 22:24 pts/0 00:00:15 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java[/src]
Wie filtere ich mit Grep jetzt die Prozess-ID heraus? (in diesem Fall 26636).

//Edit: Alles klar, hab's. [src=bash]pgrep -f /usr/lib/jvm[/src]
 
Zuletzt bearbeitet:
Oh oh, das kann aber gewaltig schief gehen. Daher hatte ich das PIDfile empfohlen ;)

btw, wenn du schnell Hilfe brauchst: #bash @ chat.freenode.net. Ich empfehle Hexchat zum Verbinden.
 
  • Thread Starter Thread Starter
  • #9

[src=bash]"stop") pkill -f java;;
"restart") pkill -f /usr/lib/jvm;;[/src]

Beim stop wird das gesamte Java gekillt - der Launcher der .jar auch.
Beim restart wird nur die Java Virtual Machine gekillt - Launcher bleibt offen.
 
[src=bash]
java start_deine_jar.jar &
START_DEINE_JAR_PID=$!
.
.
.
kill $START_DEINE_JAR_PID
[/src]

So kannst du das machen.
 
OK, das verstehe ich jetzt nicht. Was für ein Prozess wird durch die jar gestartet?
 
  • Thread Starter Thread Starter
  • #14
Die .jar ist ein Launcher. Der Launcher hat seinen eigenen Prozess, der wiederum einen neuen Prozess heraufbeschwört.

Launcher:
[src=text]cazawhi 5619 1 0 14:25 pts/0 00:00:00 optirun -b primus -c yuf java -jar Launcher.jar[/src]

Der durch den Launcher gestartete Prozess:
[src=text]cazawhi 5680 5629 88 14:25 pts/0 00:00:12 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java -Xmx3G -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -Xmn128M usw.. ewig lange beschreibung..[/src]

//Edit: Für die, die sich fragen was ist: Das ist ein spezieller Treiber für Laptops mit NVidia-Grafikkarten und einem i5, der ja auch eine interne Graka hat. D.h optirun = nutz' die NVdia.
 
Zuletzt bearbeitet:
Zurück
Oben