bonjour! Alors voilà, je dois faire une xercie sur Linux pour demain, j´ai commencé mon script, seuleument, il y a des erreurs de syntaxe! Voilà déjà l´énoncé:
Créez un script qui permet de mettre en place le réseau. Il doit prendre 1 argument qui sera soit start, stop, restart,
status ou zap. Il détectera automatiquement toutes les cartes réseaux et permettra de spécifier quelle carte
réseau utiliser.
1. Il devra lire le fichier de configuration (ci-joint) qui contiendra les informations suivantes
sur une interface :
• L’interface doit elle récupérer une adresse dynamiquement (DHCP) ou bien doit elle être statique.
• Dans le cas d’une adresse statique, quelle est l’adresse IP, l’adresse de broadcast, quelle est la passerelle par défaut
(gateway), quelles sont les adresses des DNS, ... à attribuer.
• Dans le cas d’une attribution dynamique via DHCP, quel est le nom de la machine à envoyer au DHCP (hostname),
quel est le délai d’attente avant l’arrêt des requêtes DHCP (timeout).
Exemple 1.2. Fichier de configuration :
DHCP=yes
NETADDR=192.168.0.10
BCAST=255.255.255.0
NETMASK=192.168.0.255
DNS=192.168.0.1:212.30.96.108
GATEWAY=192.168.0.1
TIMEOUT=5
HOSTNAME=`hostname`
2. Il devra prendre en argument différents paramètres que voici :
start : Le script devra lire un fichier de configurations (par exemple, net.conf, ...) et mettre en place les différentes interfaces
suivant les paramètres lus dans ce fichier de configuration :
stop : Les interfaces devront alors être démontés, le client DHCP arrêté si nécessaire.
restart : Appels successifs de stop puis start.
status : L’argument status permettra de déterminer si le script a déjà été démarré ou non.
zap : L’argument zap permettra de forcer l’état du script à stop.
3. Le script comportera les variables suivantes :
• Le nom et le chemin vers le client DHCP : DHCP_PROG
• Le nom et le chemin vers le fichier temporaire : TEMP_FILE
• Le chemin vers le script qui contient le fichier de configuration : CONF_DIR
Maintenant, voilà ce que j´ai fait:
-Créer un répertoire bin dans /home/vair (vair est mon user)
-dans bin, j´ai créer un fichier net.conf, qui est le fichier de configuration donné dans l´exercice (c´est le prof qui nous a dit de faire ça)
- j´ai donc ensuite écrit mon script, que voici:
source net.conf
read -p "Quelle commande voulez vous éxécuter, Start, Stop, Restart,Status,Zap ? " reponse case "$reponse" in
Start)
if [ $DHCP= "yes" ]; then
`dhclient`
;;
Stop)
`ifconfig eth0 down`
;;
Restart)
`ifconfig eth0 down` ;
if [ $DHCP= "yes" ]; then
`dhclient`
;;
Status)
;;
Zap)
echo "" ;;
Voilà, quand je lance, il me demande bien la commande, mais peut importe celle que je choisis, il me met trois erreurs:
./script.sh line 4: read: `´: not a valid identifier
./script.sh line 5: syntax error near unexpected token `)´
./script.sh line 5: ` Start)´
voilà, alors je ne comprend pas ces erreurs,si seuleument quelqu´un pouovait me les expliquer!
Merci d´avance!
PS: Je n´ai aps trouvé pour Status, et je suis casiment sur que Zap est faux, mais je préfère les trouver tout seul!
PS2: Désolé pour mon premier topic, il est vrai que ce n´était pas, sympa de vous demander de faire ça a ma place! Désolé!
question bête : pourquoi mets-tu des ` autour des commandes dhclient et cie alors que tu n´en mets pas pour echo ?
Ce sont toutes des commandes, donc ça devrait employer avec la même syntaxe. (celle que tu utilises pour echo à en croire le message d´erreur
)
Sinon, à quoi sert le fichier dont le nom est stocké dans $TEMP_FILE ? (cela aurait-il un lien avec le code que tu dois faire pour status ?)
J´ai pas testé (par flemme
), donc il doit y avoir des erreurs, mais l´idée est là :
http://rafb.net/p/slvsO191.html
Je stocke le statut dans TEMP_FILE, je ne sais pas si c´est ce qui est demandé (l´énoncé est flou à ce sujet).
En outre, il n´y a aucune gestion des erreurs et je mets en dur l´interface réseau à utiliser. À toi d´améliorer le script pour :
- qu´il fonctionne ;)
- qu´il gère les erreurs
- qu´il détecte les carte réseau et spécifie celle à utiliser
@+
Je viens de remarquer une erreur, remplace dans le script « resolv.conf » par « /etc/resolv.conf »
1) tu es trop gentil
2) le lien ne marche pas ![]()
1) Merci ![]()
Enfin c´était surtoût pour passer le temps en attendant « La méthode Cauet ».
2) Arf chez moi il passe bien pourtant. :/
Allez dans le doute, un bon gros paste des familles sur le forum :
(Attention les yeux ça va être moche sans l´identation -- déjà qu´avec, c´est pas triste...
) :
DHCP_PROG=/sbin/dhclient
CONF_DIR=/usr/local/etc/net
TEMP_FILE=/tmp/status
IFCONFIG=/sbin/ifconfig
IFACE=eth0
ROUTE=/sbin/route
source $CONF_DIR/net.conf
static_ip () {
# Configuration des DNS
echo $DNS | tr -s ´:´ ´\n´ > /etc/resolv.conf
# Configuration de la passerelle
$ROUTE add default gw $GATEWAY
# Configuration de l´interface
$IFCONFIG $IFACE $NETADDR broadcast $BCAST netmask $NETMASK up
return 0
}
do_start () {
if [ $DHCP = "yes" ] then
$DHCP_PROG $IFACE
else
static_ip
fi
echo "status:1" > $TEMP_FILE
return 0
}
do_stop () {
$IFCONFIG $IFACE down
echo "status:0" > $TEMP_FILE
}
case "$1" in
start)
do_start
exit 0
;;
stop)
do_stop
exit 0
;;
restart)
do_stop
do_start
exit 0
;;
status)
if [ -f $TEMP_FILE ] then
if [ `cut -f 2 -d ´:´ $TEMP_FILE` = 1 ]
echo "Le script a été démarré"
else
echo "Le script n´a pas été démarré
fi
else
echo "Le script n´a pas été démarré"
fi
exit 0
;;
zap)
echo "status:0" > $TEMP_FILE
exit 0
;;
*)
echo "Mauvaise option"
exit 0
;;
esac
Je viens de voir une autre erreur.
Le fichier resolv.conf, n´est pas correctement renseigné.
Ajoute ceci en dessous du echo $DNS... :
sed -i "s/^\(.\)/nameserver \1/" resolv.conf
Coquille :
sed -i "s/^\(.\)/nameserver \1/" /etc/resolv.conf
![]()
3) t´as vraiment rien d´autre à faire ? ![]()
Si mais des trucs chiants comme la mort, alors tout moyen de procrastiner est le bienvenu. ^^
Faudrait quand-même que je fasse disparaitre les six sacs poubelles et les huit kilos de poussières pour ne pas effrayer les futurs locataires potentiels de mon appartement susceptibles de venir visiter ce week-end...
´Fin bon faut dormir aussi, du coup : Gute Nacht !
Je parie que t´auras même pas un merci ![]()
Je viens de voir son PS qui disait qu´il voulait faire tout seul le « status » et le « zap », j´aurais peut-être droit à des reproches. ![]()
Tu as de la chance que c´est pas un de mes élèves surtout.
(en même temps, je ne suis pas encore prof, c´est vrai).
En fait c´est moi son prof, je voulais le piéger.
Je l´ai reconnu tout de suite, y´a qu´un seul John Chickenboubou parmi mes élèves. ![]()
héhé ![]()
Au faite, prof de quoi ?
Je ne sais pas encore
Maths ou info.
Ah oui, histoire de te rassurer : quand je dis info, il s´agit d´enseigner la programmation ou de l´informatique théorie. (donc pas la création de site web
)
Ouf ! ;- )
Ba bonne chance contre tout ces vilains garnements (ça va sans doute aller avec des élèves du supérieur
)