En fait, je voudrais créer un script qui convertit l’adresse ip en binaire.
Enfin, j’ai déjà créé le script et je veux l’optimiser en mettant une boucle “for” :
[code]#! /bin/sh
#echo “Entrez votre adresse IP :” #read rep
echo $rep
for (( i=1 ; i<=4 ; i++ ))
do
case $[oct$i] in
’1’)
declare -a tab$i[32]
tab$i[1]=0;tab$i[2]=0;tab$i[3]=0;tab$i[4]=0;tab$i[5]=0;tab$i[6]=0;tab$i[7]=0;tab$i[8]=1
;;
‘2’)
declare -a tab$i[32]
tab$i[1]=0;tab$i[2]=0;tab$i[3]=0;tab$i[4]=0;tab$i[5]=0;tab$i[6]=0;tab$i[7]=1;tab$i[8]=0
;;
…
…
‘255’)
declare -a tab$i[32]
tab$i[1]=1;tab$i[2]=1;tab$i[3]=1;tab$i[4]=1;tab$i[5]=1;tab$i[6]=1;tab$i[7]=1;tab$i[8]=1
;;
*)
esac
done
[code]# ./test4
Entrez votre adresse IP :
192.168.5.1
./test4: line 592: tab1[1]=1: command not found
./test4: line 592: tab1[2]=1: command not found
./test4: line 592: tab1[3]=0: command not found
./test4: line 592: tab1[4]=0: command not found
./test4: line 592: tab1[5]=0: command not found
./test4: line 592: tab1[6]=0: command not found
./test4: line 592: tab1[7]=0: command not found
./test4: line 592: tab1[8]=0: command not found
./test4: line 520: tab2[1]=1: command not found
./test4: line 520: tab2[2]=0: command not found
./test4: line 520: tab2[3]=1: command not found
./test4: line 520: tab2[4]=0: command not found
./test4: line 520: tab2[5]=1: command not found
./test4: line 520: tab2[6]=0: command not found
./test4: line 520: tab2[7]=0: command not found
./test4: line 520: tab2[8]=0: command not found
./test4: line 31: tab3[1]=0: command not found
./test4: line 31: tab3[2]=0: command not found
./test4: line 31: tab3[3]=0: command not found
./test4: line 31: tab3[4]=0: command not found
./test4: line 31: tab3[5]=0: command not found
./test4: line 31: tab3[6]=1: command not found
./test4: line 31: tab3[7]=0: command not found
./test4: line 31: tab3[8]=1: command not found
./test4: line 19: tab4[1]=0: command not found
./test4: line 19: tab4[2]=0: command not found
./test4: line 19: tab4[3]=0: command not found
./test4: line 19: tab4[4]=0: command not found
./test4: line 19: tab4[5]=0: command not found
./test4: line 19: tab4[6]=0: command not found
./test4: line 19: tab4[7]=0: command not found
./test4: line 19: tab4[8]=1: command not found
L’adresse : 192.168.5.1 vaut en binaire :
/ / /
[/code]
Et j’ai constaté que c’est plus le tab$i qui passe mal que la déclaration du tableau…
Je ne suis pas sur d’avoir bien compris l’utilité d’eval dans le man :
eval [arg ...]
The args are read and concatenated together into a single command. This command is then read and executed by the shell, and its exit status is returned as the value of eval. If there are no args, or only null arguments, eval returns 0.
Si je traduis ca me donne (corrigé moi si je me trompe) :
Les arguments sont lus et enchaînés ensemble comme une seule commande. Cette commande est alors lue et exécutée par le shell, et sa valeur est retournée comme une valeur d’eval. Si il n’y a pas d’arguments ou seulement une valeur nulle, eval retourne 0.
Maintenant, dans notre cas pratique, on a : ‘eval tab$i[x]=Y’ au lieu de ‘tab$i[x]=Y’. En quelque sorte, si je ne me trompe pas, eval lit ‘tab$i[x]=Y’ et le renvoie, dans le cas où i=2 par exemple, ‘tab2[x]=Y’ en tant que tel ?
Mon script fonctionne à merveille !! Maintenant, comme on peut le voir, c’est une fonction qui doit être utilisée. Cependant, cette fonction je voudrais qu’elle renvoie le tableau au script qui fait appel à la fonction. Mais je ne trouve que ‘return’ qui peut renvoyer qu’un entier. Est-ce que c’est réalisable ?
Autre chose qui n’a rien à voir, je veux créer un script qui demande d’être root au départ et qui demande de changer d’utilisateur au cours du script. J’ai intégré ‘su nom_utilisateur’ mais toutes les commandes qui suivaient passe toujours sous ‘root’… Comment puis-je faire ?
en shell, la valeur de retour est effectivement dédiée au code d’erreur, mais si c’est une fonction, et que tu veux accèder à la variable tableau de l’exterieur, il suffit peut être bêtement de la déclarer à l’exterieur de ta fonction, non ?
(mon shell est lointain, et je me demande même si les variables d’un script ne sont pas toutes globales, d’ailleurs)
PS: sinon, passes au perl…
Je vais tester le su toto -c ce soir. C’est pour un script de création d’utilisateur pour PostgreSQL.
Sinon, y a beaucoup de différence entre le shell et le perl ?
J’imagine que le perl permet plus de chose que le shell ?
Merci beaucoup en tout cas !! J’apprécie beaucoup ce forum et toute l’aide qu’y m’est donnée !!! (il faut le dire de temps en temps, ca fait du bien !! )
Le perl a l’avantage et l’inconvènient de ressembler à un peu tous les languages dont il est issu/inspiré (shell, awk, sed, C).
Si tu passes au perl, tu n’aura pas énormément de retouche à faire pour porter tes scripts shell en perl.
Par ailleurs, quels que soient tes réflexes de programmation (déclaratif, programmation logique, structuration objet), tu va retrouver tes marques.
Un bon développeur connaissant les bases du shell fait trés vite des choses classieuses en perl.
Les reflexes spécificiques au perl (tableau, réfèrences, instanciation, portée), viennent rapidement.
Perl a quand même un petit plus pour ceux qui maitrisent ce langage semble-t-il (je ne n’en fais pas partie loin de là), si on accepte d’écrire des programmes en Write_Only, on peut faire des chefs d’oeuvre de concision qui en 10 lignes te font ce que tu 'en tout cas moi) écris péniblement en 100 lignes et plus… Il y a des concours là dessus…
[quote=“fran.b”]Perl a quand même un petit plus pour ceux qui maitrisent ce langage semble-t-il (je ne n’en fais pas partie loin de là), si on accepte d’écrire des programmes en Write_Only, on peut faire des chefs d’oeuvre de concision qui en 10 lignes te font ce que tu 'en tout cas moi) écris péniblement en 100 lignes et plus… Il y a des concours là dessus…[/quote]c’est ce qu’on peut appeler monguer mon gars.
C’est vrai que Perl c’est du costaud. Mais il a de la concurrence à son niveau.
Quid de haskel, ruby, python, qui sont aussi des langages que l’on peut integrer dans des scripts Linux, voire même Apache. Ce que je reproche à Perl, c’est justement cette façon d’utiliser les plus petits signes possibles pour faire des actions. Ça en devient illisible, et ça demande une attention soutenue (rapport café/ligne de script trés élevé). Le ruby est plus simple, car il utilise une syntaxe compréhensible. Haskel, je connais pas trop en fait, mais il paraît qu’il est pas mal. Python est sympa aussi, mais c’est un ancètre. Pour autant, on en finit pas de voir des petites applications Linux en python. Il y en a d’autre encore.