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.

#1 Le 18/08/2009, à 10:53

VivienD

Questions d'un novice en script

Bonjour,

Je suis en train d'écrire l'algorithme d'un script bash me permettant d'automatiser mes copies des fichiers systèmes. Par contre je suis un novice en la matière ; c'est pourquoi j'ai quelques questions à vous poser.
Voici ma première petite liste (si j'en ai d'autres, je déterrerai le sujet)

Dans la série "Comment qu'on fait, m'sieur ?" :
1- Comment fait-on pour qu'une action ait lieu si une touche adéquate du clavier sans qu'un caractère n'apparaisse sur le terminal ou qu'on soit obligé d'appuyer sur Entrée ? Un peu comme quand on appuie sur q pour quitter le manuel su la console.

Dans la série "C'est possible, ça ? O.O" :
2.a- Est-ce possible qu'une variable alphanumérique puisse être interprétée comme le nom d'un dossier ou d'un fichier et être inclue dans un chemin/une destination ?
Exemple : Si je tape dans mon script ce qui suit, est ce que j'arrive quelque part ? si oui, où ? dans /dos1/dos2/dos3 en admettant que ce chemin existe et mène quelque part ?

v_anmq_1 = 'dos1'
v_anmq_2 = 'dos2'
v_anmq_3 = 'dos3'
cd /$v_anmq1/$v_anmq_2/$v_anmq_3

2.b- Est-ce possible de décomposer le nom d'un dossier en plusieurs variables alphanumériques pour faire un peu comme dans le 2.a ?
Exemple 1: Comme pour le 2.a

v_anmq = 'dos'
v_anmq_1 = '1'
v_anmq_2 = '2'
v_anmq_3 = '3'
cd /$v_anmq$v_anmq_1/$v_anmq$v_anmq_2/$v_anmq$v_anmq_3

Exemple 2: Idem

v_anmq = 'dos'
cd /$v_anmq1/$v_anmq2/$v_anmq3

Mais là je ne suis pas sûr que ça fonctionne. Il doit y avoir un autre moyen de formuler le cd.

3.a- Est-ce possible qu'une variable alphanumérique prenne la "valeur" de la énième ligne d'un fichier ?
Exemple : Si j'ai un fichier "exemple.txt" contenant ce qui suit,

truc
machin
chose
bidule

est-ce qu'il y a moyen qu'une première variable soit égale à la ligne 1 (ie 'truc'), qu'une deuxième à la ligne 2 (ie 'machin') et ainsi de suite ?

3.b- Si la ligne contient un nombre, comment est considérée la variable qui en prend la valeur ? Comme une alphanumérique ou comme une numérique ? Si elle est considéré comme une alphanumérique peut-on la rendre numérique ?

C'est tout pour le moment, me semble-t-il.

Merci d'avance

PS : J'avoue effectuer des contorsions d'esprit à la limite de l'imaginable et du bon sens. roll
PS2 : Le message étant déjà plutôt long, je n'ai pas mis la raison des questions - parce qu'il y en a une, je vous l'assure - mais si vous voulez la connaître il vous suffira de la demander pour l'avoir. wink
PS3 : Les autres novices ont tout à fait le droit d'utiliser ce sujet ; ça évitera d'en créer d'autres. smile


[…] 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

#2 Le 18/08/2009, à 11:04

geenux

Re : Questions d'un novice en script

1 - A ma connaissance, c'est impossible en bash. Ce qui s'en approcherait le plus, serait l'utilisation de read, mais ça nécessite l'appui sur entrée après, et l'affichage du caractère dans le terminal. Ce dont tu parle est possible en utilisant la lib ncurses (que more, less, vim et tous les programmes mi-graphiques utilisent).

2.a - Tu arrivera dans le dossier /dos1/dos2/dos3 (à condition de corriger l'oubli du "_" dans la première variable). Attention si il y a des espaces, tu devrait faire

cd "/$v_anmq_1/$v_anmq_2/$v_anmq_3"

2.b - Oui

v_anmq = 'dos'
v_anmq_1 = '1'
v_anmq_2 = '2'
v_anmq_3 = '3'
cd "/$v_anmq$v_anmq_1/$v_anmq$v_anmq_2/$v_anmq$v_anmq_3"

3.a - Oui, avec sed, ou la combinaison head/tail.

variable=$(sed -n '2p' fichier.txt)

Ça récupère la deuxième ligne du fichier dans la variable. Remplace 2p par la ligne que tu veux

Hors ligne

#3 Le 18/08/2009, à 11:30

Кຼزດ

Re : Questions d'un novice en script

VivienD a écrit :

Bonjour,

Je suis en train d'écrire l'algorithme d'un script bash me permettant d'automatiser mes copies des fichiers systèmes. Par contre je suis un novice en la matière ; c'est pourquoi j'ai quelques questions à vous poser.
Voici ma première petite liste (si j'en ai d'autres, je déterrerai le sujet)

Dans la série "Comment qu'on fait, m'sieur ?" :
1- Comment fait-on pour qu'une action ait lieu si une touche adéquate du clavier sans qu'un caractère n'apparaisse sur le terminal ou qu'on soit obligé d'appuyer sur Entrée ? Un peu comme quand on appuie sur q pour quitter le manuel sur la console.

Il faut savoir que le manuel fait appel à less, qui est un programme à part entière tongue
À ma connaissance, c'est impossible.

Dans la série "C'est possible, ça ? O.O" :
2.a- Est-ce possible qu'une variable alphanumérique puisse être interprétée comme le nom d'un dossier ou d'un fichier et être inclue dans un chemin/une destination ?
Exemple : Si je tape dans mon script ce qui suit, est ce que j'arrive quelque part ? si oui, où ? dans /dos1/dos2/dos3 en admettant que ce chemin existe et mène quelque part ?

v_anmq_1 = 'dos1'
v_anmq_2 = 'dos2'
v_anmq_3 = 'dos3'
cd /$v_anmq_1/$v_anmq_2/$v_anmq_3

Oui. Tu peux éventuellement construire des tests pour voir si le fichier existe.

2.b- Est-ce possible de décomposer le nom d'un dossier en plusieurs variables alphanumériques pour faire un peu comme dans le 2.a ?
Exemple 1: Comme pour le 2.a

v_anmq = 'dos'
v_anmq_1 = '1'
v_anmq_2 = '2'
v_anmq_3 = '3'
cd /$v_anmq$v_anmq_1/$v_anmq$v_anmq_2/$v_anmq$v_anmq_3

Exemple 2: Idem

v_anmq = 'dos'
cd /$v_anmq1/$v_anmq2/$v_anmq3

Mais là je ne suis pas sûr que ça fonctionne. Il doit y avoir un autre moyen de formuler le cd.

Si, ça devrait fonctionner ; à noter que c'est plus pratique de faire

cd "/$v_anmq1/$v_anmq2/$v_anmq3"

au cas où il y aurait des espaces.

3.a- Est-ce possible qu'une variable alphanumérique prenne la "valeur" de la énième ligne d'un fichier ?
Exemple : Si j'ai un fichier "exemple.txt" contenant ce qui suit,

truc
machin
chose
bidule

est-ce qu'il y a moyen qu'une première variable soit égale à la ligne 1 (ie 'truc'), qu'une deuxième à la ligne 2 (ie 'machin') et ainsi de suite ?

Comme dit par geenux,

variable=$(sed -n '2p' fichier.txt)

ou sinon

 head -n X fichier.txt |tail -n 1

(X = ligne voulue)

3.b- Si la ligne contient un nombre, comment est considérée la variable qui en prend la valeur ? Comme une alphanumérique ou comme une numérique ? Si elle est considéré comme une alphanumérique peut-on la rendre numérique ?

Je n'ai pas bien compris, mais sache que les variables en bash ne sont pas typées, c'est à dire qu'un nombre est une chaîne et une variable numérique à la fois, tu peux plus ou moins faire ce que tu veux ^^

C'est tout pour le moment, me semble-t-il.

Merci d'avance

PS : J'avoue effectuer des contorsions d'esprit à la limite de l'imaginable et du bon sens. roll
PS2 : Le message étant déjà plutôt long, je n'ai pas mis la raison des questions - parce qu'il y en a une, je vous l'assure - mais si vous voulez la connaître il vous suffira de la demander pour l'avoir. wink
PS3 : Les autres novices ont tout à fait le droit d'utiliser ce sujet ; ça évitera d'en créer d'autres. smile

De rien wink
pour le PS: il faut être un peu tordu pour le bash, de toute façon ^^
Sinon, pour tes variables, il faut coller les éléments comme ça :

variable='valeur'

sinon les différents éléments seront considérés comme des commandes à exécuter


dou

Hors ligne

#4 Le 18/08/2009, à 12:47

Link31

Re : Questions d'un novice en script

VivienD a écrit :

1- Comment fait-on pour qu'une action ait lieu si une touche adéquate du clavier sans qu'un caractère n'apparaisse sur le terminal ou qu'on soit obligé d'appuyer sur Entrée ? Un peu comme quand on appuie sur q pour quitter le manuel su la console.

stty -icanon -echo && echo "Appuyez sur une touche..." && echo "Vous avez appuyé sur: $(head -c1)"; stty icanon echo

Dernière modification par Link31 (Le 18/08/2009, à 12:50)

Hors ligne

#5 Le 18/08/2009, à 13:02

geenux

Re : Questions d'un novice en script

Génial comme commande Link31, je connaissais pas. smile

Hors ligne

#6 Le 18/08/2009, à 13:26

Кຼزດ

Re : Questions d'un novice en script

geenux a écrit :

Génial comme commande Link31, je connaissais pas. smile

+1


dou

Hors ligne

#7 Le 18/08/2009, à 13:46

atichu

Re : Questions d'un novice en script

MAthieuI tu copira 100fois.
Je ne dirais plus "on peut pas faire sur ubuntu" mais "je sais pas faire".

big_smile


Je ne suis pas un geek ni un informaticien mais j'aime linux/ubuntu.
acer aspire5741G (unity 12.04))+une vieillebousse(xfce 12.04)
+teste de la version instable

Hors ligne

#8 Le 18/08/2009, à 14:56

VivienD

Re : Questions d'un novice en script

Merci pour vos réponses rapides smile

stty -icanon -echo && echo "Appuyez sur une touche..." && echo "Vous avez appuyé sur: $(head -c1)"; stty icanon echo

Euh ... 'va falloir me décoder stty (-)icanon (-)echo et le $(head -c1) parce que je n'ai pas tout à fait compris la manœuvre

Par contre je souhaite approfondir les questions 2.a et 2.b par un petit 2.c pour être sûr de bien comprendre tongue
2.c-Admettons que j'aie branché plusieurs disques durs externes ou clés USB, pouvant être partitionnés. Ainsi dans mon dossier /media s'accumulent les sous-dossiers /disk, /disk-1, /disk-2 et cætera. Ce que je voudrais faire, c'est avec une boucle while (avec incrémentation d'une variable d'indice, i, partant de zéro) faire un test sur la présence des dossiers /disk-i ; au début du code i_fin est nul mais, dès que disk-i n'existe pas, i_fin prend la valeur du précédent i et on quitte la boucle.
Voici mon code

[...]

let"i = 0"
let"i_fin = 0"

while [ $i_fin -eq 0 ]
do
       let"i += 1"

       if [ -e $'disk-$i' ] ; then
       else
                let"i_fin = i - 1"
       fi
done

[...]

Est-ce que ça marche ?

Édits : Corrections de quelques erreurs.

Dernière modification par VivienD (Le 18/08/2009, à 15:07)


[…] 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

#9 Le 18/08/2009, à 18:00

geenux

Re : Questions d'un novice en script

Il y a bien plus simple pour faire ce que tu veux avec les disques :

ls /media/disk-*

Ça affichera le contenu de tous les disques (disk-1,disk-2...).
Tu peux utiliser un truc du genre pour faire une boucle sur les dossiers...

Hors ligne

#10 Le 18/08/2009, à 20:26

Link31

Re : Questions d'un novice en script

VivienD a écrit :
stty -icanon -echo && echo "Appuyez sur une touche..." && echo "Vous avez appuyé sur: $(head -c1)"; stty icanon echo

Euh ... 'va falloir me décoder stty (-)icanon (-)echo et le $(head -c1) parce que je n'ai pas tout à fait compris la manœuvre

"stty" change les paramètres du terminal.

"-icanon" permet de lire des caractères sans attendre l'appui sur la touche entrée ("icanon" rétablit le comportement normal).

"-echo" désactive l'affichage desdits caractères dans la console ("echo" rétablit l'affichage). Les commandes comme echo ne sont pas concernées par ce dernier paramètre, seulement ce que tu tapes toi-même dans la console.

"head -c1" lit un caractère... smile

Hors ligne

#11 Le 18/08/2009, à 20:50

VivienD

Re : Questions d'un novice en script

@ geenux :
J'ai besoin de cette boucle pour effectuer d'autres calculs intermédiaires.
Mais qu'est-ce que j'ai écrit dans le code ? Je corrige ça tout de suite !

[...]

let "i = 0"
let "i_fin = 0"

while [ $i_fin -eq 0 ]
do
       let "i += 1"

       if [ -e disk-$i ] ; then
       else
                let "i_fin = i - 1"
                [...]
       fi
done

[...]

C'est déjà mieux tongue Je n'ai pas bu mon quota de café aujourd'hui lol

@ Link31 :
Merci pour tes éclaircissements.


[…] 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

#12 Le 19/08/2009, à 11:50

VivienD

Re : Questions d'un novice en script

Bonjour,

Cette nuit des idées et les questions qui vont avec ont germé. Drôles de plantes, me diriez-vous. lol

Dans la série "C'est possible, ça ? O.O" :
4-Est-ce possible de connaître le chemin absolu du script en cours d'utilisation ? Si oui comment qu'on fait ?
Je m'explique : mon programme me fait trimballer un peu partout dans tout l'ensemble des fichiers et dossiers du Linux, pour quelques "menues" vérifications de crainte de ne faire tout, sauf ce qu'il faut pour effectuer une copie de sauvegarde des fichiers systèmes (par exemple, ce serait con d'essayer de copier quoi que soit dans un disque, soit inexistant, soit pas prévu pour ça) ; enfin bref à la fin je ne sais plus à quelle adresse est le script en cours d'utilisation, juste à côté duquel se trouvent quelques fichiers nécessaires au bon fonctionnement dudit script. hmm

5-Est-ce possible de faire des tableaux à plusieurs dimensions ? (Oui, ça sent fort les boucles imbriquées tongue lol) Si oui, est-ce qu'ils s'écrivent comme ci-dessus ?

tableau[ ][ ]...[ ]

6-Est-ce possible qu'un script puisse commander l'exécution d'autres scripts ?

Dans la série des questions n'ayant pas forcément rapport aux scripts :
7-Est-ce que le répertoire /home contient des fichiers nécessaires au bon fonctionnement de l'OS ou des programmes installés ?

8-Je vais faire un petit fichier texte pour résumer les questions et réponses posées dans le sujet ; je le mettrai au début du premier message. Quel format est conseillé ? .txt, .odt, .pdf ou autre chose ? Comment crée-t-on un lien de téléchargement (sans connaître la manœuvre ça risque de moins bien marcher 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

#13 Le 19/08/2009, à 11:59

Кຼزດ

Re : Questions d'un novice en script

VivienD a écrit :

Bonjour,

Cette nuit des idées et les questions qui vont avec ont germé. Drôles de plantes, me diriez-vous. lol

Dans la série "C'est possible, ça ? O.O" :
4-Est-ce possible de connaître le chemin absolu du script en cours d'utilisation ? Si oui comment qu'on fait ?
Je m'explique : mon programme me fait trimballer un peu partout dans tout l'ensemble des fichiers et dossiers du Linux, pour quelques "menues" vérifications de crainte de ne faire tout, sauf ce qu'il faut pour effectuer une copie de sauvegarde des fichiers systèmes (par exemple, ce serait con d'essayer de copier quoi que soit dans un disque, soit inexistant, soit pas prévu pour ça) ; enfin bref à la fin je ne sais plus à quelle adresse est le script en cours d'utilisation, juste à côté duquel se trouvent quelques fichiers nécessaires au bon fonctionnement dudit script. hmm

pwd te conviendrait-il ?

5-Est-ce possible de faire des tableaux à plusieurs dimensions ? (Oui, ça sent fort les boucles imbriquées tongue lol) Si oui, est-ce qu'ils s'écrivent comme ci-dessus ?

tableau[ ][ ]...[ ]

Jamais essayé, je peux pas trop te répondre tongue

6-Est-ce possible qu'un script puisse commander l'exécution d'autres scripts ?

Bien sûr, si tu places

./script.sh

ou

sh script.sh

ou même

python script_python.py

ça ne pose pas de problème

Dans la série des questions n'ayant pas forcément rapport aux scripts :
7-Est-ce que le répertoire /home contient des fichiers nécessaires au bon fonctionnement de l'OS ou des programmes installés ?

Pas que je sache, non, juste que ça peut poser problème si tu te logges avec un compte dont le $HOME est inexistant. normalement, ça ne contient que tes documents et tes préférences personnelles.

8-Je vais faire un petit fichier texte pour résumer les questions et réponses posées dans le sujet ; je le mettrai au début du premier message. Quel format est conseillé ? .txt, .odt, .pdf ou autre chose ? Comment crée-t-on un lien de téléchargement (sans connaître la manœuvre ça risque de moins bien marcher tongue) ?

Si tu peux, fais un PDF avec la source en LaTeX, mais sinon un .txt passe très bien et a l'avantage d'être lisible dans toutes les situations.
(après, je dis ça, tant que tu le proposes pas en .docx, j'ai pas d'objections tongue)

Dernière modification par mathieuI (Le 19/08/2009, à 12:01)


dou

Hors ligne

#14 Le 19/08/2009, à 12:10

Elzen

Re : Questions d'un novice en script

Edit : owned, mais j'explique mieux tongue

Alors alors, voyons ça...

8/ Pour un fichier "texte", c'est du .txt, normalement tongue Les autres, ce sont d'autres formats ^^
Le texte simple fera l'affaire, je pense. Sinon, le PDF est destiné aux documents fini, tandis que l'OpenDocument est censé être fait pour ce qui va avoir besoin d'être modifié par le destinataire.
Mais tu peux aussi, plutôt que de mettre un fichier en téléchargement, créer une page dans la doc, normalement wink

7/ /home contient les répertoires personnels des utilisateurs, en théorie, qui eux contiennent "seulement" leurs fichiers de configurations et leurs données. Attention, l'absence de certains fichiers de config peut causer des problèmes au démarrage de la session.

6/ Un script shell est constitué de commandes, et le lancement en console d'un script est une commande wink
Si ton script est dans un fichier auquel on a donné les droits d'exécution, tu peux utiliser le nom de ce fichier comme n'importe quelle autre commande. Si le fichier n'est pas exécutable, il faut que tu indiques un interpréteur devant, du genre ". fichier" pour ouvrir avec le shell courant.
Pour un autre langage que le shell, il y a toujours (à ma connaissance) une directive de lancement de commande quelque part, il suffit de la trouver (os.system() en python, exec en TCL...)

5/ Probablement, mais je ne suis pas spécialiste des tableaux en shell, désolé.

4/ Pas directement, du moins à ma connaissance, mais on doit pouvoir s'en sortir. J'avais commencé à faire un script qui faisait ça, à un moment, mais j'avais laissé tombé, autre chose de plus urgent à faire.

La variable $0 contient le nom de l'exécutable actuellement lancé. Si celui-ci commence par un '/', c'est son adresse absolue, il te suffit donc de découper la chaîne jusqu'au dernière '/' pour récupérer le dossier. Si celui-ci contient au moins un '/' mais en commençant par un autre caractère, c'est une adresse relative, et il faut donc composer avec la variable $PWD ou la commande pwd, qui indiquent le nom du répertoire courant.
Si le nom de l'exécutable ne contient aucun '/', deux possibilités : soit l'exécutable est dans un des répertoires du PATH, auquel cas la commande "which $0" te renverra une adresse comme celle demandée ci-dessus, soit ça a été lancé avec un interpréteur (genre "bash fichier.sh"), auquel cas "which $0" ne renverra rien, et tu peux considérer que c'est une adresse relative.
Ça ne couvre peut-être pas exactement tous les cas (si tu lance avec un interpréteur un fichier portant le même nom qu'une commande du PATH, ça doit coincer, je pense), mais dans la majorité des cas, ça devrait aller ^^

Dernière modification par ArkSeth (Le 19/08/2009, à 12:12)

Hors ligne

#15 Le 19/08/2009, à 12:44

Кຼزດ

Re : Questions d'un novice en script

ArkSeth a écrit :

Edit : owned, mais j'explique mieux tongue

C'est pas faux big_smile


dou

Hors ligne

#16 Le 19/08/2009, à 14:51

Totor

Re : Questions d'un novice en script

Bonjour,

5/ oui mais en "bricolant". Pas le temps d'expliquer en détail ('suis en congès et ma femme va me tuer si elle me voit devant l'écran yikes) mais le principe est le suivant : faire un tableau dont chaque élément est une chaine contenant les éléments de la 2nde dimension (donc sous forme de liste).
cependant, pas moyen d'y accèder par la notation tableau[][] ...
pour exemple
je délègue à link31 d'approfondir le sujet si l'exemple n'est pas assez explicite et s'il passe par là  tongue

4/Oui

chemin="$(cd "$(dirname "$0")";pwd)"

EDIT : correction orthographe

Dernière modification par Totor (Le 21/08/2009, à 12:38)


-- Lucid Lynx --

Hors ligne

#17 Le 21/08/2009, à 10:30

VivienD

Re : Questions d'un novice en script

Totor a écrit :

5/ oui mais en "bricolant". [...]

En bricolant ... hmm

(Tilt)
(Rappel des cours de Visual Basic et des embryons de démineur et tetris à programmer)

Mais bien sûr ! La coordonnée du tableau doit être une combinaison du genre tab[(i*100 + j)]. Pourtant j'en avais abusé au point de donner la frousse au prof d'info lol


[…] 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

#18 Le 21/08/2009, à 12:39

Totor

Re : Questions d'un novice en script

VivienD a écrit :

La coordonnée du tableau doit être une combinaison du genre tab[(i*100 + j)].

...à condition que tu aies un tableau de taille fixe....


-- Lucid Lynx --

Hors ligne

#19 Le 22/08/2009, à 12:00

VivienD

Re : Questions d'un novice en script

Totor a écrit :
VivienD a écrit :

La coordonnée du tableau doit être une combinaison du genre tab[(i*100 + j)].

...à condition que tu aies un tableau de taille fixe....

Effectivement mais comme dans toute programmation il faut évoluer toutes les possibilités et prévoir son coup.

Sinon voici une nouvelle petite question :

Dans le série  "C'est possible, ça ? O.O" :
9 -
Est-ce possible de coder la boucle "do while" que l'on trouve en C et C++ ?
En effet je trouve cette boucle très pratique : le programme entre dans la boucle, effectue les actions incluses dans celle-ci et enfin considère la/les condition(s) de sortie ; si elles sont remplies on sort du "do while", sinon on repart au début de la boucle et on recommence. Il me semble qu'on appelle cette boucle "Répéter jusqu'à ce que" mais je n'en suis plus trop sûr. 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

#20 Le 23/08/2009, à 12:59

Totor

Re : Questions d'un novice en script

VivienD a écrit :

Dans le série  "C'est possible, ça ? O.O" :
9 -
Est-ce possible de coder la boucle "do while" que l'on trouve en C et C++ ?
En effet je trouve cette boucle très pratique : le programme entre dans la boucle, effectue les actions incluses dans celle-ci et enfin considère la/les condition(s) de sortie ; si elles sont remplies on sort du "do while", sinon on repart au début de la boucle et on recommence. Il me semble qu'on appelle cette boucle "Répéter jusqu'à ce que" mais je n'en suis plus trop sûr. tongue

Oui, tu trouveras toutes la syntaxe bash dans le manuel (man bash). Il est un peut indigeste mais bon... c'est pas mal de le lire.


-- Lucid Lynx --

Hors ligne

#21 Le 07/11/2009, à 17:21

VivienD

Re : Questions d'un novice en script

J'ai décidé de m'initier à l'archéologie et je crois que je commence bien big_smile

Blagues à part, je déterre le topic parce que j'ai trouvé trois nouvelles questions.

Dans la série "Comment qu'on fait, m'sieur ?" :
10 -Comment qu'on fait pour ordonner (dans l'ordre alphabétique) un fichier .csv suivant les données d'une colonne ?
Je m'explique. Voici un fichier .csv (que j'ai emprunté au SiteDuZéro) :

Fabrice,18 / 20,Excellent travail
Mathieu,03 / 20,Nul comme d'hab
Sophie,14 / 20,En nette progression
Mélanie,09 / 20,Allez presque la moyenne !
Corentin,11 / 20,Pas mal mais peut mieux faire
Albert,20 / 20,Toujours parfait
Benoît,05 / 20,En grave chute

Je voudrais qu'il me range les lignes suivant les prénoms (première colonne), comme ci-dessous.

Albert,20 / 20,Toujours parfait
Benoît,05 / 20,En grave chute
Corentin,11 / 20,Pas mal mais peut mieux faire
Fabrice,18 / 20,Excellent travail
Mathieu,03 / 20,Nul comme d'hab
Mélanie,09 / 20,Allez presque la moyenne !
Sophie,14 / 20,En nette progression

Je peux aussi vouloir faire un tri selon les notes (deuxième colonne) comme ci-dessous.

Mathieu,03 / 20,Nul comme d'hab
Benoît,05 / 20,En grave chute
Mélanie,09 / 20,Allez presque la moyenne !
Corentin,11 / 20,Pas mal mais peut mieux faire
Sophie,14 / 20,En nette progression
Fabrice,18 / 20,Excellent travail
Albert,20 / 20,Toujours parfait
Albert,20 / 20,Toujours parfait
Fabrice,18 / 20,Excellent travail
Sophie,14 / 20,En nette progression
Corentin,11 / 20,Pas mal mais peut mieux faire
Mélanie,09 / 20,Allez presque la moyenne !
Benoît,05 / 20,En grave chute
Mathieu,03 / 20,Nul comme d'hab


Dans le série  "C'est possible, ça ? O.O" :
11 -
Est-il possible de permuter deux colonnes d'un fichier .csv ? Si oui, comment ?

12 - Est-il possible de rediriger le résultat d'un tri d'un fichier .csv vers un fichier .txt ou .tex ?


[…] 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

#22 Le 07/11/2009, à 17:27

geenux

Re : Questions d'un novice en script

10)

cat /tmp/test|sort -t, -k2,2

Tri en fonction de la deuxième colone uniquement (2: colone de début et 2: colone de fin)
Utilise l'option -r si tu souhaite un tri en sens inverse

11)

cat /tmp/test|awk -F, '{print $3", "$2", "$1}'

Inverse l'ordre des colones. $1 première colone, $2 deuxième...

12)commande_de_tri > fichier.txt
C'est aussi possible d'insérer à la position voulue d'un fichier.

Dernière modification par geenux (Le 07/11/2009, à 17:31)

Hors ligne

#23 Le 07/11/2009, à 18:44

VivienD

Re : Questions d'un novice en script

Ça fonctionne du tonnerre de dieu. Merci.

Sinon voici deux question qui viennent tout juste germer.

Dans la série "Comment qu'on fait, m'sieur ?" :
13 -
Comment qu'on fait pour que les lignes du premier code deviennent comme les lignes du deuxième ? Je sais qu'il fait s'amuser avec la commande « sed » mais après…

Irrtum,s;"er,n.m.,erreur,~,n.f.,0
Kind,(e)s;er,n.n.,dítě,(dítete;děti),n.n.sg./n.f.pl.,0
…
\textbf{Irrtum (s~;~\"{}er) \emph{n.m.}~:} erreur \emph{n.f.} \\

\textbf{Kind ((e)s~;~er) \emph{n.n.}~:} d\'it\v{e} (d\'itete~;~d\v{e}ti) \emph{n.n.sg./n.f.pl.} \\

…

Pas grave si vous ne me donnez qu'un bout de piste. wink
14 - Comment qu'on fait pour ajouter une ligne entre deux autres préexistantes suivant une condition (par exemple, quand une ligne commence par une lettre et que l'autre commence par une autre) ?

Dernière modification par VivienD (Le 07/11/2009, à 18:45)


[…] 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

#24 Le 07/11/2009, à 18:46

enjolras

Re : Questions d'un novice en script

bonsoir
desolé de m'incruster ds ce topic mais comme je correspond au titre xD
pas voulu creer un topic pour ca
je voudrais juste savoir
-15 ) comment on peut affecter la sortie d'une fonction a une variable ?

j'ai une fonction test

function test() {
...
exit $var;
}

et jevoudrais un truc du genre :

$var2=`test()`

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

test(1)

ne semble pas marcher
ni

test() 1

merci de votre aide

Edit comme me le fait remarquer VivienD (que ej remercie de son hospitalité )je numérote les questions

Dernière modification par enjolras (Le 07/11/2009, à 18:59)


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

Hors ligne

#25 Le 07/11/2009, à 18:53

geenux

Re : Questions d'un novice en script

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...

Hors ligne