# Variablenwert an ein shellscript übergeben



## s3993 (18. August 2005)

Hallo, folgendes Problem:

Ich habe ein Formular, mit dem ich verschiedene Werte übergebe an eine Datenbank, unter anderem auch den Benutzernamen.

Jetzt möchte ich, das genau dieser Benutzername an ein Script auf der Komandozeile übergeben wird, welches einen Ordner mit dem namen des Benutzers anlegt und welches im gleichen zuge, ein cfg File mit dem Namen des Benutzers für "MRTG" anlegt.
Das Script soll, nachdem es den Namen von php Übergeben bekommen hat natürlich auch gleich noch mit ausgeführt werden 

Das Script, an das der Name des Benutzers übergeben werden soll, funktioniert tadellos auf der Komandozeile.

Ich habe bei mir auf dem Server PHP in der Version 4.3.10 laufen.

Ich hoffe ihr könnt mir weiter helfen, Danke.

Gruß s3993


----------



## dwex (18. August 2005)

Hallo,

also alles was du schreibst kann man auch machen ohne Zugriff auf die Shell.
Und da haben wir schon unser Zauberwort "Shell" - hat nichts mit Benzin zu tun 

Es gibt die Funktion shell_exec() - diese Funktioniert aber nur wenn dein Provider auf dem Server kein "SaveMode" laufen hat.

Aber wie gesagt für dein Vorhaben braucht man kein shell_exec


----------



## s3993 (19. August 2005)

danke für deine Antwort.
Den Safe Mod habe ich selber ausgeschaltet, da ich einen eigenen Server habe.
Ich habe doch aber shellscripte, die ich ausführe:
ich poste dir mal das Script um das es genau geht.
Es liegt bei mir auf dem server im Verzeichnis /etc/xxxxx


```
#!/bin/sh
kunde=test

mkdir /srv/www/htdocs/xxx/kunden/$kunde
/usr/local/mrtg/bin/cfgmaker --output=/etc/xxx/$kunde.cfg --global "WorkDir: /srv/www/htdocs/xxxx/kunden/$kunde" --global "Language:German" --global "options[_]: growright, bits" --global "XSize[_]:400" --global "YSize[_]:200" --ifdesc=descr public@192.168.0.3
chmod -R 755 *.*
/usr/local/mrtg/bin/mrtg /etc/xxx/$kunde.cfg
/usr/local/mrtg/bin/indexmaker $kunde.cfg --output=/srv/www/htdocs/xxxx/kunden/$kunde/index1.php -autoprefix
chown -R xxx:users /srv/www/htdocs/xxx/kunden/$kunde
chmod -R 777 /srv/www/htdocs/xxx/kunden/$kunde
```

so das ist das Script.
ich möchte nichts weiter als, das ich per php in die Variable $kunde einen Namen reinschreiben kann und es danach ausführen lasse.
Wenn ich im Script der Variablen $kunde einen Namen zuweise, geht alles wunderbar (siehe 2te Zeile im Script).

das script starte ich über die Komandozeile (user:etc/xxx/#./useranlegen.sh)


----------



## s3993 (19. August 2005)

so ich hebe es jetzt hinbekommen, das er mir ein script mit den zugehörigen einträgen generiert:
----------------nutzer.php-----------------

```
<?php
$name=test;
$ip='192.168.0.1';

$code=("#!/bin/sh");
$ordner=("mkdir /srv/www/htdocs/xxx/kunden/$name");
$mrtg_cfg=("/usr/local/mrtg/bin/cfgmaker --output=/etc/xxx/$name.cfg --global \"WorkDir: /srv/www/htdocs/xxx/kunden/$name \" --global \"Language:German\" --global \"options[_]: growright, bits\" --global \"XSize[_]:400\" --global \"YSize[_]:200\" --ifdesc=descr public@$ip");
$recht_1=("chmod -R 755 /etc/xxxt/*.*");
$mrtg_run=("/usr/local/mrtg/bin/mrtg /etc/xxx/$name.cfg");
$indexmaker=("/usr/local/mrtg/bin/indexmaker $name.cfg --output=/srv/www/htdocs/xxx/kunden/$name/index1.php -autoprefix");
$recht_2=("chown -R ddit:users /srv/www/htdocs/xxx/kunden/$name");
$recht_3=("chmod -R 777 /srv/www/htdocs/xx/kunden/$name");

$generatefile = shell_exec("echo '$code' '$ordner' '$mrtg_cfg' '$recht_1' '$mrtg_run' '$indexmaker' '$recht_2' '$recht_3'  > nutzeranlegen.sh");
echo "<pre>$generatefile</pre><BR>";

?>
```

dasProblem ist, das der alles hintereinander schreibt ohne Zeilenumbruch, das heist, ich kann das script nicht ausführen.

das ganze schaut so aus

------------nutzer.sh-----------------------


```
#!/bin/sh mkdir /srv/www/htdocs/xxx/kunden/test /usr/local/mrtg/bin/cfgmaker --output=/etc/xxx/test.cfg --global "WorkDir: /srv/www/htdocs/xxx/kunden/test " --global "Language:German" --global "options[_]: growright, bits" --global "XSize[_]:400" --global "YSize[_]:200" --ifdesc=descr public@192.168.0.1 chmod -R 755 /etc/xxx/*.* /usr/local/mrtg/bin/mrtg /etc/xxx/test.cfg /usr/local/mrtg/bin/indexmaker test.cfg --output=/srv/www/htdocs/xxx/kunden/test/index1.php -autoprefix chown -R ddit:users /srv/www/htdocs/xxx/kunden/test chmod -R 777 /srv/www/htdocs/xxx/kunden/test
```

wie bekomme ich jetzt zeilenumbrüche darein?
hat einer eine Idee, wie ich das problem lösen kann?


----------



## dwex (19. August 2005)

Hallo,

wenn du das Script über PHP generierst dann mach doch am Ende jeder Zeile ein \n dann hast du dein Zeilenumbruch in deiner Datei.


----------



## s3993 (19. August 2005)

mit dem \n hab ich schon getestet, habe auch \n\r versucht, ging alles nicht, habe es aber jetzt hinbekommen, ich poste mal den quelltext, vieleicht hilft es ja irgendwann mal jemandem weiter.
Danke für deine Hilfe.


```
<?php
$name=$username;
			$ip=$ipadr;
		
			$code=("#!/bin/sh");
			$ordner=("mkdir /srv/www/htdocs/xxx/kunden/$name");
			$mrtg_cfg=("/usr/local/mrtg/bin/cfgmaker --output=/etc/xxx/$name.cfg --global \"WorkDir: /srv/www/htdocs/xxx/kunden/$name \" --global \"Language:German\" --global \"options[_]: growright, bits\" --global \"XSize[_]:400\" --global \"YSize[_]:200\" --ifdesc=descr public@$ip");
			$recht_1=("chmod -R 755 /etc/xxx/*.*");
			$mrtg_run=("/usr/local/mrtg/bin/mrtg /etc/xxx/$name.cfg");
			$indexmaker=("/usr/local/mrtg/bin/indexmaker $name.cfg --output=/srv/www/htdocs/xxx/kunden/$name/index1.php -autoprefix");
			$recht_2=("chown -R xxx:users /srv/www/htdocs/xxx/kunden/$name");
			$recht_3=("chmod -R 777 /srv/www/htdocs/xxx/kunden/$name");
			
			$generatefile1 = shell_exec("echo '$code' > /etc/xxx/nutzeranlegen.sh");
			$generatefile2= shell_exec("echo '$ordner' >> /etc/xxx/nutzeranlegen.sh");
			$generatefile3= shell_exec("echo '$mrtg_cfg' >> /etc/xxx/nutzeranlegen.sh");
			$generatefile4= shell_exec("echo '$mrtg_run' >> /etc/xxx/nutzeranlegen.sh");
			$generatefile5= shell_exec("echo '$inexmaker' >> /etc/xxx/nutzeranlegen.sh");
			$generatefile6= shell_exec("echo '$recht_2' >> /etc/xxx/nutzeranlegen.sh");
			$generatefile7= shell_exec("echo '$recht_3' >> /etc/xxx/nutzeranlegen.sh");
			echo "<pre>$generatefile1</pre>";
			echo "<pre>$generatefile2</pre>";
			echo "<pre>$generatefile3</pre>";
			echo "<pre>$generatefile4</pre>";
			echo "<pre>$generatefile5</pre>";
			echo "<pre>$generatefile6</pre>";
			echo "<pre>$generatefile7</pre>";
			
			$output = shell_exec('chmod 755 /etc/xxx/nutzeranlegen.sh 2>&1');
			
			
			$output1 = exec('/etc/xxx/nutzeranlegen.sh');
			echo "<pre>Statistik wurde erfolgreich erstellt!</pre><BR>";
?>
```

Es geht wunderbar, kann per formular die daten übergeben und er legt das script an und führt es auch gleich aus. Perfekt.

Danke noch mal.

Gruß s3993


----------

