Debian Shell Script sh Dateien ausführen

5 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Hallo

Ich wollte mal wissen, wie man mit einer .sh Datei andere .sh Dateien in unterschiedlichen Verzeichnissen ausführt

Das ist doch einfach:

#!/bin/bash

echo "Script 'xyz.sh' wir gestartet..."

bash /pfad/zum/anderen/script/scriptname.sh

echo "scriptname ist beendet worden"

echo "Starte zweites Script..."

bash /pfad/zum/script/script2.sh

exit 0

Es ist bei Scripten ratsam immer komplette Pfade anzugeben und auf Hard- oder Soft-Links zu verzichten, also kein . oder ~ usw.

Natürlich braucht der Benutzer der das Ursprungsscript startet auch die Berechtigung diese Pfade zu betreten und die Dateien auszuführen.

Linuxhase

Woher ich das weiß:eigene Erfahrung – Ich benutze seit 2007 Linux und habe LPIC101 und LPIC102

Einfach wie andere Programme aufrufen. Ggf. entweder das Verzeichnis mit in den PATH nehmen, oder halt mit vollem Pfad aufrufen.

Aufruf mit relativem Pfad ist nicht empfehlenswert, weil Du nicht weißt, in welchem Arbeitsverzeichnis sich der Aufrufer des gerade laufenden Skriptes befindet.

Achte auch darauf, dass Deine Shellskripte gesetzte "x"-Bits haben müssen, um als ausführbares Programm erkannt zu werden.


guenterhalt  04.04.2015, 16:35

Achte auch darauf, dass Deine Shellskripte gesetzte "x"-Bits haben müssen, um als ausführbares Programm erkannt zu werden.

müssen sie nicht unbedingt, wenn man, in diesem Falle bash, so:

bash "Shell-Script"

benutzt.

zuerst eine Klarstellung: jede Datei kann die DateiNamenErweiterung .sh haben, ob sich dahinter ein Script-Text in sh- oder in bash- oder in tclsh- oder in cs- oder ... Syntax verbirgt, ist gleichgültig. Auch doc-Dateien oder Binaries können so eine Endung haben. Und mit Debian hat das auch nichts zu tun.

Ob ein Shell-Script, dessen Name sich in einer in einer Datei befindet, auch durch den Interpreter gefunden wird, hängt z.B. von der Variablen PATH ab.

In dieser Variablen stehen Verzeichnisse, in denen gesucht wird, wenn nicht der volle Pfad angegeben ist. Man kann PATH auch beliebig erweitern und so seine Privaten Verzeichnisse aufnehmen.

Beispiel:

# 1. shell-Script /home/wrtzu987654321/script/mein-erstes.sh

# 1. shell-Script /home/wrtzu987654321/script/mein-zweite.bash

export PATH=$PATH:/home/wrtzu987654321/script/

mein-erstes.sh

mein-zweites.bash

# oder auch mit neuer Variablen (MEINE_SHS)

MEINE_SHS=/home/wrtzu987654321/script/

$MEINE_SHS/mein-erstes.sh

$MEINE_SHS/mein-zweites.bash

# ganz ohne Variable:

/home/wrtzu987654321/script/mein-erstes.sh

/home/wrtzu987654321/script/mein-zweite.bash

Woher ich das weiß:Berufserfahrung – openSuSE seit 1995

barnim  04.04.2015, 16:56

$PATH um Verzeichnisse unter /home zu erweitern sollte man aus Sicherheitsaspekten nicht tun.

cheers | barnim

guenterhalt  04.04.2015, 19:42
@barnim

kannst du auch erklären, warum openSuSE für alle User

/home/"username"/bin

in die PATH-Variable aufnimmt?

Linuxhase  05.04.2015, 00:35
@barnim

@barnin

$PATH um Verzeichnisse unter /home zu erweitern sollte man aus Sicherheitsaspekten nicht tun.

Kannst Du das mal anhand eines Beispiels erklären?

Linuxhase

barnim  05.04.2015, 16:42
@Linuxhase

Je nachdem an welcher Stelle z.B. /home/user/foo in PATH steht, kann es moeglich sein, bekannte Binaries wie z.B. ls oder cd durch irgendwas Fieses unter /home/user/foo zu ersetzen.

Bei schlecht gemanagten Webhosting Paketen sieht man sowas manchmal (gemeint sind die Klassiker wie DDoS-Bots, Port-Scanner, SSH-Brute-Forcer etc.).

cheers | barnim

guenterhalt  05.04.2015, 16:56
@barnim

wer so etwas macht, der macht auch "sudo für jedermann" und das ist etwas Fieses doch nur eine Kleinigkeit.

Danke schonmal,

aber jetz gibt es ein anderes Problem.Meine Ordnerstruktur ist so: /home/user/oberverzeichniss/unterverzeichniss1-10. In jedem Unterordner liegt nun ein script, der eine jar Datei ausführt. Nun möchte ich mit einem Script im oberverzeichniss alle scripte ausführen, aber alle in ihren Verzeichnissen, also nicht in dem Oberverzeichniss.

Ich hoffe man konnte das verstehen 

Gruß wertzu


barnim  05.04.2015, 18:16

Quick&Dirty:

find -name meinscript.sh -exec sh {} \;

cheers | barnim

Annahme: Du moechtest in /home/bla/wrapper.sh /usr/local/sbin/service.sh ausfuehren:

wrapper.sh

#!/bin/sh

echo "Ich bin wrapper.sh"

mein_service="/usr/local/sbin/service.sh"

sh ${mein_service} || exit 1

exit 0

cheers | barnim