Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 07/11/2009, à 18:55

VivienD

Re : Questions d'un novice en script

Pas de problème, enjolras. wink

PS: Par contre ce serait nickel-chrome si tu numérotais les questions (qu'on s'y retrouve plus facilement). tongue


[…] puisque les hommes aiment selon leur fantaisie et craignent à la discrétion du Prince, le Prince prudent et bien avisé se doit de fonder sur ce qui dépend de lui, non pas sur ce qui dépend des autres ; […]
Machiavel, Le Prince, Chapitre XVII.

Hors ligne

#27 Le 07/11/2009, à 18:57

Кຼزດ

Re : Questions d'un novice en script

enjolras a écrit :

-comment on peut affecter la sortie d'une fonction a une variable ?
et jevoudrais un truc du genre :

$var2=`test()`

Tu as plusieurs choix.
tout d'abord, le exit quitte le terminal ouvert, donc c'est pas forcément ce que tu veux faire tongue
Pour récupérer la sortie standard (les messages affichés classiquement, type echo), il faut faire

var2=$(test)

Comme dit plus haut, un exit n quitte le terminal en cours en renvoyant la valeur n; tu peux récupérer cette valeur qui est contenue dans la variable $?.
Par exemple :

bash -c 'exit 42'
echo "$?"

renvoie 42.

-comment entrer les argument lors de l'appel de la fonction ?

test(1)

ne semble pas marcher
ni

test() 1

merci de votre aide

test 1

tongue


dou

Hors ligne

#28 Le 07/11/2009, à 18:59

geenux

Re : Questions d'un novice en script

test() {
echo $(($1+$2))
}
retour=`test 3 5`
echo $retour

Le exit sert à quitter le script en renvoyant un code d'erreur, pas à returner la valeur d'une fonction.

Hors ligne

#29 Le 07/11/2009, à 19:01

enjolras

Re : Questions d'un novice en script

Merci beaucoup


A la découverte d'un nouveau continent...

Hors ligne

#30 Le 08/11/2009, à 15:24

VivienD

Re : Questions d'un novice en script

geenux a écrit :

13 -

sed -e 's/^\(.*\)$/\\textbf{\1} \\\\/g' /tmp/test

Je te conseille tout de même de te renseigner au minimum sur les commandes sed, awk, sort, tr, cut, c'est des très grand classiques utilisés par presque tous les scripts. Si tu ne les connais pas, tu sera réduit à demander toutes les 5 lignes de tes scripts...

J'y tâcherai wink

Sinon, j'ai tapé un code sed pour la substitutions des lettres accentuées ; tout fonctionne bien sauf quand il y a un accent aigu. Je souhaite en effet que, par exemple, les é deviennent des \'e, mais l'apostrophe pose problème. J'ai tapé le code ci-dessous et le script me balance une erreur à une cause d'un caractère de fin de fichier (EOF) prématuré lors de la recherche du « ' » correspondant.

sed 's/é/\\\'e/g'

Qu'est-ce que j'ai fait de faux ?


[…] puisque les hommes aiment selon leur fantaisie et craignent à la discrétion du Prince, le Prince prudent et bien avisé se doit de fonder sur ce qui dépend de lui, non pas sur ce qui dépend des autres ; […]
Machiavel, Le Prince, Chapitre XVII.

Hors ligne

#31 Le 08/11/2009, à 15:42

Кຼزດ

Re : Questions d'un novice en script

sed "s#é#\'e#g"

?


dou

Hors ligne

#32 Le 08/11/2009, à 16:03

VivienD

Re : Questions d'un novice en script

Merci smile mais finalement c'est :

sed "s#é#\\\'e#g"

Ton code ne m'affiche que 'e.


[…] puisque les hommes aiment selon leur fantaisie et craignent à la discrétion du Prince, le Prince prudent et bien avisé se doit de fonder sur ce qui dépend de lui, non pas sur ce qui dépend des autres ; […]
Machiavel, Le Prince, Chapitre XVII.

Hors ligne

#33 Le 08/11/2009, à 16:05

Кຼزດ

Re : Questions d'un novice en script

VivienD a écrit :

Merci smile mais finalement c'est :

sed "s#é#\\\'e#g"

Ton code ne m'affiche que 'e.

ah oui, pardon, j'avais oublié de remettre ça après avoir testé tongue


dou

Hors ligne

#34 Le 08/11/2009, à 19:10

VivienD

Re : Questions d'un novice en script

J'aimerais limiter les effets du code suivant, entre la première et la troisième virgule rencontrées.

sed -e 's/^\(.*\)$/\\textbf{\1} \\\\/g' /tmp/test

Est-ce possible ?


[…] puisque les hommes aiment selon leur fantaisie et craignent à la discrétion du Prince, le Prince prudent et bien avisé se doit de fonder sur ce qui dépend de lui, non pas sur ce qui dépend des autres ; […]
Machiavel, Le Prince, Chapitre XVII.

Hors ligne

#35 Le 08/11/2009, à 20:22

geenux

Re : Questions d'un novice en script

Oui, possible, je comptais te laisser chercher, mais vu que j'ai eu du mal, voilà une possibilité :

sed -e '^s/\([^,]*,\)\{2\}\(.*\),.*$/\\textbf{\2} \\\\/g' /tmp/test

Explications :
\([^,]*,\)\{2\} : parcours la chaine tant qu'une virgule n'a pas été trouvée, quand on en trouve une il faut lui dire de passer après, d'où la deuxième virgule. On répète cette action 2 fois, ce qui nous amène à la 3ème colone.
\(.*\) : on capture ce qui nous intéresse
,.* : on s'arrête à la virgule suivante (cad la 3ème ici)

Il y a sans doute plus propre, mais ça fonctionne bien.

Hors ligne

#36 Le 24/11/2009, à 17:22

VivienD

Re : Questions d'un novice en script

Bonsoir,

Dans la série "C'est possible, ça ? O.O" :
17-
Je voudrais juste savoir s'il est possible de faire de faire 100% pur sed (avec une en-tête du genre « #!/bin/sed »). Si c'est le cas, j'aimerais avoir un exemple comparatif (pas grave si l'exemple est bateau) de syntaxe entre une commande sed inséré dans un script bash et la même commande dans un script sed.


[…] puisque les hommes aiment selon leur fantaisie et craignent à la discrétion du Prince, le Prince prudent et bien avisé se doit de fonder sur ce qui dépend de lui, non pas sur ce qui dépend des autres ; […]
Machiavel, Le Prince, Chapitre XVII.

Hors ligne

#37 Le 24/11/2009, à 21:14

geenux

Re : Questions d'un novice en script

sed -f fichier_sed

Il doit donc parfaitement être possible de faire un fichier sed exécutable. Jamais testé.
En mettant

#!/bin/sed -f

Dernière modification par geenux (Le 24/11/2009, à 21:14)

Hors ligne

#38 Le 05/12/2009, à 21:50

VivienD

Re : Questions d'un novice en script

Bonsoir,

Dans la série "C'est possible, ça ? O.O" :
18-
J'ai une fonction à faire en bash (une chouette histoire de récursion, ma foi…) mais je dois travailles des tableaux venant de l'extérieur de la fonction. C'est possible ?

Dernière modification par VivienD (Le 05/12/2009, à 22:00)


[…] puisque les hommes aiment selon leur fantaisie et craignent à la discrétion du Prince, le Prince prudent et bien avisé se doit de fonder sur ce qui dépend de lui, non pas sur ce qui dépend des autres ; […]
Machiavel, Le Prince, Chapitre XVII.

Hors ligne

#39 Le 06/12/2009, à 00:22

sputnick

Re : Questions d'un novice en script

Pour recuperer la valeure de la tape sur le clavier sans que ça s'affiche :

read -n1 -s
echo $REPLY

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#40 Le 06/12/2009, à 13:16

VivienD

Re : Questions d'un novice en script

En fait je traite des tableaux dans le programme principal. À un moment le programme appelle une fonction qui doit travailler avec ces tableaux.


[…] puisque les hommes aiment selon leur fantaisie et craignent à la discrétion du Prince, le Prince prudent et bien avisé se doit de fonder sur ce qui dépend de lui, non pas sur ce qui dépend des autres ; […]
Machiavel, Le Prince, Chapitre XVII.

Hors ligne

#41 Le 06/12/2009, à 18:12

Totor

Re : Questions d'un novice en script

VivienD a écrit :

Bonsoir,

Dans la série "C'est possible, ça ? O.O" :
18-
J'ai une fonction à faire en bash (une chouette histoire de récursion, ma foi…) mais je dois travailles des tableaux venant de l'extérieur de la fonction. C'est possible ?

oui.
mais décris ton soucis plus précisément.


-- Lucid Lynx --

Hors ligne

#42 Le 06/12/2009, à 20:30

VivienD

Re : Questions d'un novice en script

Je vous tape l'algo' : ça sera mieux qu'un long, fastidieux et hasardeux discours d'un petit programmeur.

VARIABLES:
     int tab_p[11], tab_d[11] // tableaux de onze valeurs numérotées de 0 à 10
     int i //index pour les boucles
     int S //résultat de la fonction

FONCTION:
     int fnc(int tab_p[], int tab_d[], S) // la fameuse fonction
          //Un truc bidon
          pour(i = 0 ; i≤10 ; i++)
             S += tab_p[i]
             S += tab_d[i]
          fin-pour
     fin-fonction

PROGRAMME PRINCIPAL:
     //initialisation
     pour(i=0 ; i≤5 ; i++)
        tab_d[i]=1
        tab_p[i]=1
     fin-pour
     pour(i=6 ; i≤10 ; i++)
        tab_d[i]=0
        tab_p[i]=0
     fin-pour
     S = 0
     //affichage du résultat obtenu par la fonction fnc en traitant toutes les valeurs des deux tableaux tab_p[] et tab_d[]
     afficher«fnc(tab_p[],tab_d[], S)»

[…] puisque les hommes aiment selon leur fantaisie et craignent à la discrétion du Prince, le Prince prudent et bien avisé se doit de fonder sur ce qui dépend de lui, non pas sur ce qui dépend des autres ; […]
Machiavel, Le Prince, Chapitre XVII.

Hors ligne

#43 Le 06/12/2009, à 22:15

Totor

Re : Questions d'un novice en script

Où est la récursivité ?
Dans le cas avancé, le plus simple est de ne pas passer les tableaux en paramètre de la fonction mais de profiter du fait qu'ils soient accessibles depuis ta fonction (une histoire de portée).
Pourquoi ne pas les passer en paramètre : tout simplement parce que ce serait se compliquer la vie. le fait de passer un tableau en paramétre est particulier en bash puisque chaque valeur du tableau correspond à un argument. Donc à moins de passer également le nombre de valeur se trouvant dans les tableaux, tu risques de galérer pour retrouver tes petits (à moins que leur longueurs soient toujours fixes).


-- Lucid Lynx --

Hors ligne

#44 Le 06/12/2009, à 23:17

VivienD

Re : Questions d'un novice en script

Pour la récursion je n'avais plus l'exemple en tête et je n'avais pas l'algo sous la main (il était paumé dans le bazar qui orne mon bureau) ; tout ce dont je me souvenais c'est qu'il y avait trois boucles « pour » et deux « si » imbriqués les uns dans les autres, que le rappel de la fonction était tout au fond de ce pêle-mêle et qu'il pouvait y avoir un gros pépin.

Maintenant je l'ai retrouvé mais la supposée erreur n'est pas corrigée ; elle concerne np et nd dans l'algo.

int fnc(int tab_p[],int tab_d[],int S)
     int np, nd //variables-limites
     int j, k, l //indices de boucle
//initialisation
     np = 0
     nd = 0
     pour(j=0 ; j≤10 ; j++)
        np += tab_p[j]
        nd += tab_d[j]
     fin-pour
//L'imbriquation
     pour(j=1 ; j≤4 ; j++)
        pour(k=0 ; k≤(np-1) ; k++)
           si(tab_d[k]=1)
           alors
              tab_d[k] = 0
              pour(l=0 ; l≤(np-1) ; l++)
                 si(tab_d[l]=1)
                 alors
                    tab_d[l] = 0
                    S++
                    tab_p[np] = 1
                    tab_d[np] = 1
                    fnc(tab_p[],tab_d[],S) //La récursion
                 fin-si
              fin-pour
           fin-si
        fin-pour
     fin-pour

[…] puisque les hommes aiment selon leur fantaisie et craignent à la discrétion du Prince, le Prince prudent et bien avisé se doit de fonder sur ce qui dépend de lui, non pas sur ce qui dépend des autres ; […]
Machiavel, Le Prince, Chapitre XVII.

Hors ligne

#45 Le 31/05/2010, à 15:40

VivienD

Re : Questions d'un novice en script

Bonjour

Je déterre ce sujet — et me découvre par la même occasion une vocation  pour l'archéologie … ou pas — car ça m'évite d'en créer un autre et le recyclage c'est bon pour l'environnement — quelle excuse à la con.

Ne déterrant pas le sujet pour des prunes, voici mes nouvelles questions :

Dans la série "C'est possible, ça ? O.O" :
19-Est-il possible de supprimer un alias que l'on a créé et qui ne nous sert plus ?

20-Est-il possible de gérer des options ? Si oui, comment ?
Voici un exemple pour illustrer ce que j'entends par « option » :

ls -lA ~/Documents

Ici, -lA est l'option de ls.

Merci d'avance.

Dernière modification par VivienD (Le 31/05/2010, à 15:40)


[…] puisque les hommes aiment selon leur fantaisie et craignent à la discrétion du Prince, le Prince prudent et bien avisé se doit de fonder sur ce qui dépend de lui, non pas sur ce qui dépend des autres ; […]
Machiavel, Le Prince, Chapitre XVII.

Hors ligne

#46 Le 31/05/2010, à 17:03

Totor

Re : Questions d'un novice en script

19 :
Oui : unalias <nom_alias>

20 :

Oui avec getopts : Pour exemple


-- Lucid Lynx --

Hors ligne

#47 Le 31/05/2010, à 17:21

VivienD

Re : Questions d'un novice en script

Merci.

Je m'en vais copier ton script sur un .txt et analyser ça tranquillement.


[…] puisque les hommes aiment selon leur fantaisie et craignent à la discrétion du Prince, le Prince prudent et bien avisé se doit de fonder sur ce qui dépend de lui, non pas sur ce qui dépend des autres ; […]
Machiavel, Le Prince, Chapitre XVII.

Hors ligne

#48 Le 31/05/2010, à 18:07

Totor

Re : Questions d'un novice en script

consulte le manuel du bash pour plus de détail sur getopts


-- Lucid Lynx --

Hors ligne

#49 Le 13/06/2010, à 14:28

VivienD

Re : Questions d'un novice en script

Désolé, j'ai beau essayer de comprendre via ton script, Totor, mais ça me reste flou.


[…] puisque les hommes aiment selon leur fantaisie et craignent à la discrétion du Prince, le Prince prudent et bien avisé se doit de fonder sur ce qui dépend de lui, non pas sur ce qui dépend des autres ; […]
Machiavel, Le Prince, Chapitre XVII.

Hors ligne