Was machen diese Commands im Shell-Script?

3 Antworten

So wird das sicherlich nicht im Script stehen, aber gut:

Case vergleich ositional 1 mit den darauf folgenden Strings (Cases), siehe auch die Doku hierzu.

daemon könnte ein spezifisches Command der Distri sein.

echo -n Macht eine Ausgabe ohne Zeilenumbruch.

status könnte wie daemon distributionsspezifisch sein

. ist das Äquivalent zu source (Einem Import/Include eines anderen Scripts - meistens finden sich diese am Anfang des Scripts.

Schon mal Danke :). Ein bisschen konntest du mir schon helfen.

Es ist eine Schulaufgabe das Script zu verstehen und ich kann einfach nichts mit dem daemon, status, oder den variablen $0 $1 anfangen. Außerdem ist mir auch noch nicht so das gesamt klar geworden :D

#!/bin/sh

#

# Startup script for the Apache Web Server

#

# chkconfig: 345 85 15

# description: Apache is a World Wide Web server.  It is used to serve \

#           HTML files and CGI.

# processname: httpd

# pidfile: /usr/local/apache2/logs/httpd.pid

# config: /usr/local/apache2/conf/httpd.conf

# Source function library.

. /etc/rc.d/init.d/functions

# See how we were called.

case "$1" in

start)

echo -n "Starting httpd: "

daemon /usr/local/apache2/bin/httpd -DSSL

echo

touch /var/lock/subsys/httpd

;;

stop)

echo -n "Shutting down http: "

killproc httpd

echo

rm -f /var/lock/subsys/httpd

rm -f /usr/local/apache2/logs/httpd.pid

;;

status)

status httpd

;;

restart)

$0 stop

$0 start

;;

reload)

echo -n "Reloading httpd: "

killproc httpd -HUP

echo

;;

*)

echo "Usage: $0 {start|stop|restart|reload|status}"

exit 1

esac

exit 0

0
@Chabamaleon

War fast klar, daß es ein Initscript ist - Aber hey, Deine Schulaufgaben solltest Du schon selbst erledigen - die cases sind übrigens start/stop/status/reload/*

status/daemon sind vermutlich in /etc/rc.d/init.d/functions definiert, also dort mal schauen.

2
  1. RTFM... wenn du daemon in der man-page nich verstehst, dann solltest du genauer beschreiben, was du nich verstehst... stümmt's?
  2. echo kannst du einfach ausprobieren... das „-n“ verhindert den Zeilenvorschub (LF) am Ende...
  3. „status httpd“ ist gar kein Kommando...
  4. wo hast du denn „case "$1" in“ gefunden? da gehört doch noch mehr dazu... nämlich die Beschreibung der Fälle, die unterschiedlich gehandhabt werden sollen...
  5. „. blah“ führt blah aus, als würde man es eintippen (also Variablen-Änderungen bleiben sichtbar...)...

Schon mal Danke :). Ein bisschen konntest du mir schon helfen.

Es ist eine Schulaufgabe das Script zu verstehen und ich kann einfach nichts mit dem daemon, status, oder den variablen $0 $1 anfangen. Außerdem ist mir auch noch nicht so das gesamt klar geworden :D

#!/bin/sh

#

# Startup script for the Apache Web Server

#

# chkconfig: 345 85 15

# description: Apache is a World Wide Web server.  It is used to serve \

#           HTML files and CGI.

# processname: httpd

# pidfile: /usr/local/apache2/logs/httpd.pid

# config: /usr/local/apache2/conf/httpd.conf

# Source function library.

. /etc/rc.d/init.d/functions

# See how we were called.

case "$1" in

start)

echo -n "Starting httpd: "

daemon /usr/local/apache2/bin/httpd -DSSL

echo

touch /var/lock/subsys/httpd

;;

stop)

echo -n "Shutting down http: "

killproc httpd

echo

rm -f /var/lock/subsys/httpd

rm -f /usr/local/apache2/logs/httpd.pid

;;

status)

status httpd

;;

restart)

$0 stop

$0 start

;;

reload)

echo -n "Reloading httpd: "

killproc httpd -HUP

echo

;;

*)

echo "Usage: $0 {start|stop|restart|reload|status}"

exit 1

esac

exit 0

0
@Chabamaleon

ach je...

  1. $0 ist der Name des laufenden Programms/Skripts...
  2. $1 ist der erste Parameter des laufenden Programms/Skripts...
  3. wenn der also z. B. "stop" ist, dann ... *gähn*
  4. hast du dir mal die Datei /etc/rc.d/init.d/functions angesehen? da müsste es Funktionen namens "daemon" und "status" und "killproc" geben...
  5. im Fall „restart“ ruft „$0 stop“ das Skript mit dem Parameter „stop“ auf...
1

Hallo

case "$1" in
daemon /usr/local/apache2/bin/httpd -DSSL
echo -n "Shutting down http: "
status httpd
. /etc/rc.d/init.d/functions

case "$1" in heißt auf Deutsch:

Falls $1 beinhaltet... (das folgende ist)
  • Eine Variable fängt immer mit einem Dollarzeichen an (aber nicht immer leitet ein Dollarzeichen eine Variable ein)
  • Die Zahl 1 in der Variablen bezeichnet den ersten übergebenen Parameter beim Programm-/Script-Aufruf.

Du würdest gewissermaßen das Script so starten:

./scriptname daemon /usr/local/apache2/bin/httpd -DSSL

und damit die Bedingung erfüllen, worauf dann folglich das Kommando:

echo -n "Shutting down http: "

ausgeführt werden sollte. ABER

  1. eigentlich ist der erste Parameter (also $1)nur das Wort daemon
  2. und der Pfad /usr/local/apache2/bin/httpd ist dann $2 und das -DSSL wäre dann $3.

Du kannst das leicht testen wenn Du Dir ein solches Script schreibst:

#!/bin/bash
# Scriptname testscript.sh
echo Der Scriptname lautet: $0
echo Variable Eins beinhaltet: $1
echo Variable Zwei einhaltet: $2
echo Variable Drei einhaltet: $3

Wenn Du das dann so

bash testscript.sh daemon /usr/local/apache2/bin/httpd -DSSL

ausführst kommt das heraus:

Der Scriptname lautet: casetest.sh
Variable Eins beinhaltet: daemon
Variable Zwei einhaltet: /usr/local/apache2/bin/httpd
Variable Drei einhaltet: -DSSL

Oder Du bestimmst die Variablen selbst so das man diese nicht erst beim Scriptstart übergeben muss:

#!/bin/bash
# Scriptname testscript.sh
######################################
# Variablen definieren
VAR1="daemon"
VAR2="/usr/local/apache2/bin/httpd"
VAR3="-DSSL
#####################################
# Auszuführende Kommandos
echo Der Scriptname lautet: $0
echo Variable VAR1 beinhaltet: $VAR1
echo Variable VAR2 einhaltet: $VAR2
echo Variable VAR3 einhaltet: $VAR3

Dann würde die Ausgabe die gleiche sein.

Linuxhase

Gibt es eine möglichkeit, den benutzer währen eines shell-skriptes mehrfach zu wechseln (su passwort eingabe simulieren)?

Hallo liebe Communiy,

ich habe ein kleines Problem.. Aktuell versuche ich eine Hausaufgabe für ein Unifach zu automatisieren.

Ich schreibe ein Shell-Skript auf Ubuntu 14.10 mit dem man das Nutzungsverhalten mehrerer User innerhalb einer Shell simulieren kann. Dabei ist mir schon relativ früh aufgefallen, das die Passworteingabe mittels:

su [username]

nicht auf anhieb funktionieren will...

Das Ganze sieht im Teilausschnitt so aus:

su [username]

12345

cd /tmp

echo 'hier wird eine Testnachricht erzeugt' >> nachr-alice

exit

12345 soll das Passwort sein aber die Shell kann damit nichts anfangen. Ich erhalte nach dem Ausführen stetts einen Error von der Shell:

su:Authentication failure

aufgabe1.sh: line 2 12345: command not found

nachdem per exit der User wieder ausgeloggt wird, wird sich ein neuer User einloggen und das wechselt also im prinzip die ganze Zeit.

Hat jemand schon ein ähnliches Problem lösen können?

Außerdem sollte ich erwähnen das keine externen Pakete installiert werden können.

Vielen dank für eure Antworten :)

...zur Frage

Linux apt problem?

Hey Leute. Ich möchte momentan meinen Debian (7) Server einrichten, vieles ist schon konfiguriert, und soweit funktioniert das auch. Nun hatte ich noch vor einen Webserver einzurichten

Meine befehle wären gewesen (Zugriff via PuTTY): apt-get update apt-get upgrade apt-get install apache2 php5 libapache2-mod-php5 apt-get install mysql-server mysql-client php5-mysql apt-get install phpmyadmin /etc/init.d/apache2 restart

allerdings erhalte ich bei den commands fehler Meldung:

You have new mail in /var/mail/root 

root@Fr3ezZers:~# apt-get update 

E: Archives directory /var/cache/apt/archives/partial is missing. - Acquire (2: No such file or directory)

root@Fr3ezZers:~# apt-get upgrade 

E: Unable to write to /var/cache/apt/ E: The package lists or status file could not be parsed or opened. 

root@Fr3ezZers:~# apt-get install apache2 php5 libapache2-mod-php5 E: Unable to write to /var/cache/apt/

 E: The package lists or status file could not be parsed or opened. 

root@Fr3ezZers:~# apt-get install mysql-server mysql-client php5-mysql E: Unable to write to /var/cache/apt/ 

E: The package lists or status file could not be parsed or opened. 

root@Fr3ezZers:~# apt-get install phpmyadmin E: Unable to write to /var/cache/apt/ 

E: The package lists or status file could not be parsed or opened.

Was soll ich nun machen?

...zur Frage

Apache configurations Fehler, wie kann ich diesen beheben?

Hi GuteFrage.net-Community(also Hallo an dich! :) ),

ich habe mir einen Apache2 Webserver mit php und libapache2-mod-php, danach MySQL (Server und Client) php-MySQL per apt-get installiert. Danach habe ich noch phpmyadmin installiert, aber es wurde nicht im Web angezeigt, also habe ich

echo Include /etc/init.d/apache2.conf >> (das >> soll eigentlich 2 Pfeile nach Links darstellen)  /etc/apache2/apache.conf

eingegeben, und den Webserver neugestartet, aber es kam ein Error heraus.

[failed!] Starting apache2 (via systemctl):
apache2.serviceJob for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.

Dann hatte ich

systemctl status apache2.service 

eingegeben und folgendes kam heraus:

* apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           `-apache2-systemd.conf
   Active: failed (Result: exit-code) since Sat 2017-05-27 09:49:58 UTC; 3min 2s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 19282 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
  Process: 18233 ExecReload=/etc/init.d/apache2 reload (code=exited, status=0/SUCCESS)
  Process: 19902 ExecStart=/etc/init.d/apache2 start (code=exited, status=1/FAILURE)

May 27 09:49:58 Server apache2[19902]:  *
May 27 09:49:58 Server apache2[19902]:  * The apache2 configtest failed.
May 27 09:49:58 Server apache2[19902]: Output of config test was:
May 27 09:49:58 Server apache2[19902]: apache2: Syntax error on line 222 of /etc/apache2/apache2.conf: Could not open configuration file /etc/init.d/
May 27 09:49:58 Server apache2[19902]: Action 'configtest' failed.
May 27 09:49:58 Server apache2[19902]: The Apache error log may have more information.
May 27 09:49:58 Server systemd[1]: apache2.service: Control process exited, code=exited status=1
May 27 09:49:58 Server systemd[1]: Failed to start LSB: Apache2 web server.
May 27 09:49:58 Server systemd[1]: apache2.service: Unit entered failed state.
May 27 09:49:58 Server systemd[1]: apache2.service: Failed with result 'exit-code'.

,und dann hatte ich unte in der .conf Datei geschaut ob da auch wirklich die Datei angegeben ist weil in dem Error oben /etc/init.d/ stand.

/etc/init.d/apache.conf:

...
# Include of directories ignores editors' and dpkg's backup files,
# see README.Debian for details.

# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Include /etc/init.d/apache.conf   (der angegebene Error)

Was kann ich tuen, dass der Fehler behebt wird?

MFG ItzCrasher (P.S.: Diesen Text werde ich auch auf anderen Seiten posten.)

...zur Frage

Batch-Datei Ordner Un- bzw. Sichtbar machen

Hey Leute kann mir jemand erklären wie ich eine Batch-Datei schreibe die zwischen zwei befehlen wechselt also 1 mal aufrufen befehl eins noch einmal befehl 2. usw.

Hier die Befehle

Verstecken:

@echo off

attrib +h D:\test

exit

Sichtbar:

@echo off

attrib -h D:\test

exit

...zur Frage

Mit PHP Shell Script ausführen?

Hi Community, und zwar möchte ich mithilfe von php ein shell script ausführen und den rückgabewert abfangen.

Mein Shell script: (/home/pi/test.sh)

var=$(sudo gatttool -b 50:F1:4A:50:9C:97 --char-write-req --handle=0x0025 --value=32 --listen >> logfile.txt &)
A=$!
sleep 2
kill $A
echo "$var"
exit 0

und nun bräuchte ich ein php skript (Speicherort: /var/www/html/test.php)das dieses Skript ausführt und den Rückgabewert in eine Variable speichert. Jegliche Versuche von mir sind leider gescheitert...

Gruß Physikgr.

...zur Frage

Was möchtest Du wissen?