Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 13-01-2017 17:26:59

debian-alain
Membre
Distrib. : DEBIAN JESSIE 8.7
Noyau : Linux 3.16.0-4-amd64
(G)UI : GNOME
Inscription : 31-08-2016

explication de texte

quelqu'un peut il m'expliquer la ligne suivante :

je suis en train de m'instruire sur la programmation en shell

qui sait , je vais peut être me lancer ?...

voilà la ligne a  expliquer :

./script.sh | cut -d':' -f1,3



cut':'  prends la sortie de script.sh à partir des 2 points(délimiteur)  ':' , ça je sais mais -f1,3 ?

-f ? ça veut dire quoi ? et -f1,3 ?

Hors ligne

#2 13-01-2017 17:34:41

bendia
Admin stagiaire
Distrib. : Stretch (et un peu Jessie)
Noyau : Linux 4.9.0-2-amd64
(G)UI : Gnome + Console
Inscription : 20-03-2012
Site Web

Re : explication de texte

Salut smile

-f, c'est field, qui veut dire champ. C'est les parties entres les délimiteurs. 1,3 signifie que tu ne séléctionne que les champs 1 et 3 wink

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.
file-Re06858991f6f328b4907296ac5cea283

En ligne

#3 14-01-2017 09:24:11

debian-alain
Membre
Distrib. : DEBIAN JESSIE 8.7
Noyau : Linux 3.16.0-4-amd64
(G)UI : GNOME
Inscription : 31-08-2016

Re : explication de texte

d'accord , alors voilà le contenu d e script.sh :

#!/bin/sh
     
     for p in $(dpkg -l | awk '/^ii/ { print $2 }')
     do
        for f in $(dpkg -L "$p" | grep '^/')
        do
            if [ ! -e  "$f" ]
            then
                [ -L "$f" ] || { printf "%s: au moins un fichier manquant %s\n" "$p" "$f" && break; }
            fi
        done
    done



j'aimerai le comprendre

for p in $(dpkg -l | awk '/^ii/ { print $2 }')
     do

ça veut dire quoi pour commencer ?

que veulent dire "in" et "awk"  ? awk ,je crois que c'est de la programmation pure dans le shell

Hors ligne

#4 14-01-2017 09:35:57

smolski
administrateur quasi...modo
Lieu : AIN
Distrib. : 8 (jessie) 64 bits + backports
Noyau : 3.16.0-4-amd64 - 3.16.39-1
(G)UI : gnome 1:3.14+3
Inscription : 21-10-2008

Re : explication de texte

awk : https://debian-facile.org/doc:programmation:awk
un peu de recherche perso dans le wiki suffit à trouver la réponse à ce genre de question.
C'est ce qui est le plus difficile à acquérir sur internet, savoir chercher, entraines-toi à cet exercice avant de demander sur le forum où souvent nous le faisons pour nos propres questions ainsi que pour étayer nos réponses

As-tu consulté préalablement le tuto sur bash :
https://debian-facile.org/doc:programmation:bash

Ensuite, si'il te reste des points qui ne sont pas révélés, nous pourrons compléter les tutos avec tes remarques au possible, le "nous" pouvant être toi-même, si tu le veux bien.

... 53-1--1f7c.gif

"Théo et Adama te rappellent pourquoi Zyed et Bouna couraient…"
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

En ligne

#5 14-01-2017 09:47:01

debian-alain
Membre
Distrib. : DEBIAN JESSIE 8.7
Noyau : Linux 3.16.0-4-amd64
(G)UI : GNOME
Inscription : 31-08-2016

Re : explication de texte

apparemment ça veut dire :

tant que p = (dpkg -l | awk '/^ii/ { print $2 }') , alors  tant que f =  (dpkg -L "$p" | grep '^/') alors if [ ! -e  "$f" ] then  [ -L "$f" ] || { printf "%s: au moins un fichier manquant %s\n" "$p" "$f" && break; }



la commande dpkg -l , je connais à peu près ; c'est une commande bash pour lister les paquets du systeme mais c'est le pipe qui suit qui m'interpelle :

| awk '/^ii/ { print $2 }'



awk , je sais que c'est de la programmation sous shell .

mais j'ai beau chercher , je comprends pas plus

Hors ligne

#6 14-01-2017 10:05:10

debian-alain
Membre
Distrib. : DEBIAN JESSIE 8.7
Noyau : Linux 3.16.0-4-amd64
(G)UI : GNOME
Inscription : 31-08-2016

Re : explication de texte

ben , disons smolski , c'est pas que j'ai pas cherché . chez moi , je me suis procuré  un livre sur la programmation shell sous linux
justement pour comprendre  ce script que l'on m'a donné et qui m' a aidé fut un temps . (avec un autre script pour la réparation) .

j'ai cherché sous google , mal sans doute . souvent , pour l'accès aux informations , c'est tellement compliqué
que c'est plus commode de passer par le forum .

vous me pardonnez j'espère ....

en même temps vous êtes là pour ça , non ? wink

je viens de m' apercevoir que j'ai oublié de vous dire bonjour . sans rancune , j'espère ....

apparemment 

for p in $(dpkg -l | awk '/îi/ { print $2 }')

demande à shell d'imprimer le deuxième champ de la commande "dpkg -l"  en retirant les premiers "ii"

reste

for f in $(dpkg -L "$p" | grep '^/')

ça veut dire quoi ?

Dernière modification par debian-alain (14-01-2017 10:32:58)

Hors ligne

#7 14-01-2017 10:31:26

smolski
administrateur quasi...modo
Lieu : AIN
Distrib. : 8 (jessie) 64 bits + backports
Noyau : 3.16.0-4-amd64 - 3.16.39-1
(G)UI : gnome 1:3.14+3
Inscription : 21-10-2008

Re : explication de texte

debian-alain a écrit :

en même temps vous êtes là pour ça , non ?


Euuuuuh....

Le site n'a pas d'autres buts que de mettre en rapport des membres utilisant debian, c'est aux membres de choisir ce qu'ils y font.
Je t'ai indiqué comment chercher dans le wiki avant de poser une question afin de te permettre de te passer du site pour questionner et parvenir à devenir un de nos brillants animateurs pour l'entraide.
Donc, je te renouvelle mon conseil précédent, déjà il y a une petite case en haut à gauche des pages du wiki où tu écris awk par exemple et tu auras le tuto concernant awk proposé en lien avant même que tu valides.

C'est cela l'entraide et non pas laisser dans la dépendance les personnes qui viennent ici chercher des sources qu'elles ne trouvent pas seules.

Pour : être là pour ça (ok, c'est une expression malheureuse que tu ne penses pas si abruptement), il faudrait alors du personnel rémunérées pour l'accomplir, et là, c'est plus du libre mais un marché où nous introduirons forcément des liens commerciaux pour le rentabiliser financièrement, comme sur certains sites...

L'avantage de ton acharnement à comprendre est que tu enrichis souvent le forum, mais tu le ferais plus encore en développant par toi-même tes questions réponses, notamment dans le wiki, dont justement qu'on causait qu'il est là pour ça, lui, sous la veille et la responsabilité de tous les membres df, sans exception aucune.

Force et courage dans ton aventure, amitié, Joel smile


"Théo et Adama te rappellent pourquoi Zyed et Bouna couraient…"
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

En ligne

#8 14-01-2017 10:37:08

chalu
Modératrice
Lieu : Anjou
Distrib. : Debian Stretch
Noyau : Linux 4.9.0-3-amd64
(G)UI : Mate 1.16
Inscription : 11-03-2016

Re : explication de texte

for je traduirais plus ça par pour. Et habituellement c'est une boucle avec un nombre de réalisations des instructions qui est connu et indiqué juste après le for
La commande dpkg -l | awk '/^ii/ { print $2 }' doit lister les paquets installés
et la variable (?) p prend successivement chacune des valeurs de cette liste

Hors ligne

#9 14-01-2017 10:55:00

debian-alain
Membre
Distrib. : DEBIAN JESSIE 8.7
Noyau : Linux 3.16.0-4-amd64
(G)UI : GNOME
Inscription : 31-08-2016

Re : explication de texte

oui tu as raison smolski , je me suis très mal exprimé  . passons sur ce dérapage malheureux .

pour

for f in $(dpkg -L "$p" | grep '^/')

apparemment   dpkg -L "$p"  fait un dpkg -L avec
les données de la ligne précédente (savoir le nom du paquet seul).

reste le grep'^/' , ça veut dire quoi ?

apparemment : enregistre  les lignes dpkg -L de  dpkg -l(nom du paquet) à partir du caractère /

donc récapitulons :

la première ligne affiche le nom du paquet , la deuxième ligne plus précisément met en mémoire l'adresse du paquet  donc on obtient :

affiche nom du paquet + mise en memoire  chemin du paquet

reste la troisième ligne :

if [ ! -e  "$f" ]



apparemment : si on n'imprime pas $f , alors ....

[ -L "$f" ] || { printf "%s: au moins un fichier manquant %s\n" "$p" "$f" && break; }



faire un dpkg -L $f à travers le pipe printf "%s: au moins un fichier manquant %s\n" + imprimer le dpkg -L "$f"


c'est bien ça smolski ?

salut chalu , si tu t'y connais , tu peux me donner ton avis ?

grosses bises au passage .

Dernière modification par debian-alain (14-01-2017 11:34:37)

Hors ligne

#10 14-01-2017 12:45:32

chalu
Modératrice
Lieu : Anjou
Distrib. : Debian Stretch
Noyau : Linux 4.9.0-3-amd64
(G)UI : Mate 1.16
Inscription : 11-03-2016

Re : explication de texte

J'ai juste des notions d'algorithmique mais je ne connais pas ce langage. Alors comme expliqué par smolski je cherche sur le wiki et le net pour comprendre un peu wink
Ta question par exemple sur grep a sa réponse dans le wiki : expression rationnelle.
https://debian-facile.org/doc:systeme:grep
Bon courage smile

Hors ligne

#11 14-01-2017 13:28:32

MicP
Membre
Distrib. : debian stable
Noyau : Linux 3.16.0-4-amd64
(G)UI : Xfce
Inscription : 29-02-2016

Re : explication de texte

Diviser le script en petites lignes de commandes pour pouvoir en comprendre le fonctionnement :

#!/bin/sh
     
     for p in $(dpkg -l | awk '/^ii/ { print $2 }')
     do
        for f in $(dpkg -L "$p" | grep '^/')
        do
            if [ ! -e  "$f" ]
            then
                [ -L "$f" ] || { printf "%s: au moins un fichier manquant %s\n" "$p" "$f" && break; }
            fi
        done
    done


=======

#!/bin/sh

C'est ce qu'on apelle le SHEBANG : il ne s'agit donc pas d'un script bash (sinon ce serait : /bin/bash)
mais d'un script qui sera interprété par /bin/sh
qui est un lien symbolique vers l'interpréteur de commandes /bin/dash

michel@debg53sw:~$ file /bin/sh
/bin/sh: symbolic link to dash
michel@debg53sw:~$
 


=======

     for p in $(dpkg -l | awk '/^ii/ { print $2 }')


il s'agit d'une boucle for assignant à la variable p les valeurs retournées par $(dpkg -l | awk '/^ii/ { print $2 }')

=======

dpkg -l | awk '/^ii/ { print $2 }'

Il y a deux commandes dont la sortie de l'une dpkg -l
est reliée à l'entrée de l'autre awk '/^ii/ { print $2 }'
par un tube (en anglais pipe)

En lisant les pages man de ces deux commandes, tu pourrais comprendre de quoi il s'agit,
mais comme je les connais et que je sais qu'elles ne modifieront pas ton système,
tu peux commencer par entrer la première dans une fenêtre de terminal pour voir ce qui se passe :

dpkg -l

ensuite, tu entre la combinaison des deux et tu compare les résultats.

dpkg -l | awk '/^ii/ { print $2 }'


NOTE : La première commande ne retourne pas que des lignes qui commencent pas ii

=======

[ -L "$f" ] || { printf "%s: au moins un fichier manquant %s\n" "$p" "$f" && break; }


[ -L "$f" ] <=> si le fichier "$f" existe et est du type lien symbolique retourner un code d'erreur à 0, sinon retourner  1

a || b  <=> n'exécuter la commande b que si le code de sortie d'erreur de la commande a est 1

a && b <=>  n'exécuter la commande b que si le code de sortie d'erreur de la commande a est 0

Donc :
si le test [ -L "$f" ] n'est pas positif alors { printf "%s: au moins un fichier manquant %s\n" "$p" "$f" && break; }

=======
Je te laisse continuer pour que tu aies le plaisir de découvrir par toi même ce que fait ce script.
N'hésite pas à lire les pages man des commandes :

man dash
man dpkg
man awk
man grep

Dernière modification par MicP (16-01-2017 00:39:51)

Hors ligne

Pied de page des forums