Souci avec un script bash via php

  • Voir nouveau souci post 4!
    Bonjour
    J’ai un petit souci à l’exécution du bash sous linux via php.
    Le but du script est de récupérer des info sur la config réseau de la machine.
    • Script bash

#!/bin/bash
if [ $EUID -ne 0 ]; then
	echo "$USER is not root!!!"
	exit 1
fi
#IP
IP=$(ifconfig eth0 | grep inet | cut -d: -f2 | awk '{printf $1"\n"}');
#Masque
MASQUE=$(ifconfig eth0 | grep Masque | cut -d: -f4 | awk '{printf $1"\n"}');
#Passerelle
GW=$(ip route show default | awk '/default/ {print $3}');
#DNS 1 et 2
DNS=$(cat /etc/resolv.conf |awk '{print $2}');
echo $IP
echo $MASQUE
echo $GW
echo $DNS

  • Lancé manuellement

pi@raspberrypi ~ $ sudo -s
root@raspberrypi:/home/pi# su www-data
$ sudo /var/www/scripts/bash/getNetworkConf.bash
192.168.37.45
255.255.255.0
192.168.37.1
8.8.8.8

  • Fonction d’appel en php

function getNetworkConf(){
	$out=array();
	exec("sudo ".$_SERVER["DOCUMENT_ROOT"].'/scripts/bash/getNetworkConf.bash',$out);
	$rtn=array('IP'=>$out[0],'MASQUE'=>$out[1],'GW'=>$out[2],'DNS_prim'=>$out[3],'DNS_sec'=>isset($out[4])?$out[4]:'');
	return($rtn);	
}

  • Résultat de l’éxécution via print_r()

Array ( [IP] => 192.168.37.45 [MASQUE] => [GW] => 192.168.37.1 [DNS_prim] => 8.8.8.8 [DNS_sec] => )

Le souci est que je n’arrive par aucun moyen à lui fiare cracher le masque du réseau alors qu’il veut bien me le donner manuellement.

Si quelqu’un à une idée je suis preneur!!!
Edité le 04/10/2012 à 15:32

Personne n’as d’idée?
Un modo peu déplacer en OS alternatif? je pense que ça sera plus adapté.

Pas d’idée parce que je n’ai pas la commande ou l’os pour tester (suis sous W7).

Et tu es sûr que tu n’as pas un problème du genre variable d’environnement pas définie (ou l’inverse) sur ton apache (ou autre) executant php, et pas l’inverse via ton shell ?

Essaye ça par exemple (dans le shell de ton user www-data) :

php -f "tonfichier.php"

Bon finalement je ne sait pas pourquoi mais depuis php il n’aimais pas le “grep Masque”.
Du coup j’ai avancé sur un autre script et là de nouveau souci.
Cette foi le but est d’écrire les paramètres réseau:


#!/bin/bash
#set -x
PARAMS=$( echo $@ | cut -d"-" -f2,3,4,5,6);
IP=$( echo $PARAMS | grep "IP" | awk '{printf $2"\n"}');
MASQUE=$( echo $PARAMS | grep "MASQUE"  | awk '{printf $2"\n"}');
GW=$( echo $PARAMS | grep "GW"  | awk '{printf $2"\n"}');
DNS1=$( echo $PARAMS | grep "DNS1"  | awk '{printf $2"\n"}');
DNS2=$( echo $PARAMS | grep "DNS2"  | awk '{printf $2"\n"}');
#IP et Masque
if [[ "${IP}" -ne "" ]]; then
	ifconfig eth0 $IP netmask "$MASQUE" up;
fi
#Passerelle
if [[ "$GW" -ne "" ]]; then
	route add default gw $GW eth0;
fi
#DNS 1 et 2
if [[ $DNS1 -ne "" ]]; then
	echo "nameserver $DNS1" > /etc/resolv.conf;
	if [[ $DNS2 -ne "" ]]; then
		echo "nameserver $DNS2" >> /etc/resolv.conf;
	fi
fi

Et là bim!

sudo /var/www/scripts/bash/setNetworkConf.bash -IP 192.168.37.45 -MASQUE 255.255.0.0
/var/www/scripts/bash/setNetworkConf.bash: ligne10: [[: 192.168.37.45 : erreur de syntaxe : opérateur arithmétique non valable (le symbole erroné est ".168.37.45")

apparemment il n’aime pas que je passe une variable contenant des points

quelqu’un aurait un idée?

Tu devrais tenter de lancer la commande bash avec le fichier en entrée, plutôt que d’attendre de php ou de sudo, qu’elle le fasse pour toi.

Genre

sudo -- bash /var/www/scripts/bash/setNetworkConf.bash -IP 192.168.37.45 -MASQUE 255.255.0.0