PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Benoît Boudaud : Python: Les tuples

dimanche 5 mars 2017 à 16:03

Pour une lecture plus agréable (page plus large), je vous suggère de cliquer sur ce lien et ainsi de lire ce chapitre dans la rubrique consacrée au langage Python.

Un tuple est un ensemble d’éléments comparable aux listes mais qui, une fois déclaré, ne peut plus être modifié. Il s’agit donc d’une séquence immuable d’objets indicés qui peuvent être des nombres entiers ou décimaux, des chaînes de caractères, des listes, des tuples etc…

tuple_tulipes
Tuple de tulipes

Syntaxe et déclaration

D’un point de vue syntaxique, un tuple est un ensemble d’éléments séparés par des virgules. Cet ensemble d’éléments est entouré de parenthèses mais ce n’est pas une obligation. Cela permet toutefois d’améliorer la lisibilité du code.

Déclarons un tuple :

tuple_1 = (8, "Solange", 5.3)

J’aurais très bien pu écrire :

tuple_1 = 8, "Solange", 5.3

Cela revient au même sauf que c’est moins lisible.

print(type(tuple_1))

Sans le savoir, nous avons déjà rencontré des tuples, notamment lorsque nous avons fait des affectations multiples :

a, b = 5, 6

Cette instruction d’affectation correspond à :

(a, b) = (5, 6)

Si nous souhaitons déclarer un tuple ne contenant qu’une seule valeur, il faut absolument que cette dernière soit suivie d’une virgule. En outre, il est vivement conseillé de l’inclure entre parenthèses.

c = (9,)

print(type(c))

Si nous oublions la virgule (et malgré la présence de parenthèses), le type de la variable ne sera pas un tuple :

c = (9)

print(type(c))

Utilité d’un tuple par rapport à une liste

Comme nous l’avons vu plus haut, il permet de faire des affectations multiples.

a, b = 5, 6

Le tuple permet également de renvoyer plusieurs valeurs lors d’un appel de fonction.

def information_personne(prenom, nom, age) :
    "Traitement des informations transmises"
    prenom = prenom.capitalize() # Première lettre en majuscule.
    nom = nom.upper() # remplace toutes les minuscules en majuscules
    age = int(age)
    return prenom, nom, age # Tuple sans parenthèses

p = input("Entrez votre prénom: ")
n = input("Entrez votre nom: ")
a = input("Entrez votre âge: ")

prenom, nom, age = information_personne(p, n, a) # Affectation multiple
print("Prénom:", prenom + '\\n' + "Nom:", nom + '\\n' + "Âge:", age)

Entrez votre prénom: alphonsine
Entrez votre nom: Chafouin
Entrez votre âge: 92

Résultat:

Prénom: Alphonsine
Nom: CHAFOUIN
Âge: 92

Un tuple est « protégé en écriture ».

Vous allez me dire que dans le code ci-dessus, nous pouvons obtenir le même résultat en renvoyant une liste (return [prenom, nom, age]). Mais l’avantage d’un tuple, c’est qu’il s’agit d’une séquence non modifiable (immuable) donc protégée en écriture. Nous sommes sûrs que les données transmises par la fonction input() ne seront pas modifiées en cours d’exécution par un autre programme. Dans le code ci-dessus, je n’ai aucun moyen de modifier les informations transmises.

Par contre, dans le code ci-dessous où je renvoie une liste, je peux modifier les données transmises et rajeunir Mamie Alphonsine!

def information_personne(prenom, nom, age) :
    "Traitement des informations transmises"
    prenom = prenom.capitalize() # Première lettre en majuscule.
    nom = nom.upper() # remplace toutes les minuscules en majuscules
    age = int(age)
    return [prenom, nom, age] # liste

p = input("Entrez votre prénom: ")
n = input("Entrez votre nom: ")
a = input("Entrez votre âge: ")

identification = information_personne(p, n, a) #Liste
identification[2] = '45' # Je modifie l'âge
print("Prénom:", identification[0] + '\\n' + "Nom:", identification[1] + '\\n' + "Âge:", identification[2])

Entrez votre prénom: alphonsine
Entrez votre nom: Chafouin
Entrez votre âge: 92

Prénom: Alphonsine
Nom: CHAFOUIN
Âge: 45

Un tuple est moins gourmand en ressources système qu’une liste.

Il a besoin de moins de mémoire et il s’exécute plus rapidement.

Opérations sur les tuples

Il n’existe pas de méthodes associées aux tuples

Les tuples sont des séquences non modifiables donc il n’est pas possible d’utiliser les méthodes remove()  ou append() par exemple.

Il n’est pas possible également d’utiliser l’opérateur [] pour insérer ou remplacer un élément :

tuple_1 = (5, 2, 25, 56)
tuple_1[2] = 23
print(tuple_1)

TypeError: ‘tuple’ object does not support item assignment.

L’instruction in

Mais il est possible d’utiliser l’instruction in pour faire un test d’appartenance

tuple_1 = (5, 2, 25, 56)
print(2 in tuple_1)

Résultat: True

La fonction intégrée len()

Il est également possible d’utiliser la fonction intégrée len() pour déterminer la longueur d’un tuple.

tuple_1 = (5, 2, 25, 56)
print(len(tuple_1))

Résultat : 4

La boucle for et la compréhension de liste

Tout comme les chaînes de caractères ou les listes, les tuples peuvent être parcourus par une boucle for ou une compréhension de liste. Dans ce dernier cas, le résultat obtenu est toujours une liste.

Concaténation et multiplication

Nous pouvons créer un nouveau tuple par concaténation ou par multiplication

tuple_1 = (5, 2, 25, 56)
tuple_2 = ("Jacky", "Hervé")
tuple_3 = tuple_1 + tuple_2
print(tuple_3)

Résultat: (5, 2, 25, 56, « Jacky », « Hervé »)

tuple_prenoms = ("Jacky", "Hervé")
tuple_prenoms = tuple_prenoms * 3
print(tuple_prenoms)

Résultat: (‘Jacky’, ‘Hervé’, ‘Jacky’, ‘Hervé’, ‘Jacky’, ‘Hervé’)

Dans ce dernier exemple, certains vont me dire: « Mais Ordinosor! Tu nous a dit qu’un tuple n’était pas modifiable et tu viens juste de modifier tuple_prenoms! »

Faux! Je n’ai appliqué aucune méthode de modification sur tuple_prenoms. J’ai seulement écrasé la valeur contenue dans la variable qui porte le nom de tuple_prenoms en lui affectant une nouvelle valeur.

Conclusion

Les tuples sont des séquences non modifiables qui s’avèrent bien utiles pour protéger en écriture des données transmises. En outre, ils sont moins gourmands en ressource système et sont traités plus rapidement.

Puisqu’il est immuable, il est possible d’utiliser un tuple comme clé de dictionnaire mais à la seule condition que le tuple ne contienne que des éléments non modifiables! Du reste, ce sera l’objet du prochain chapitre.


Gravatar de Benoît Boudaud
Original post of Benoît Boudaud.Votez pour ce billet sur Planet Libre.

Articles similaires

Dimitri Robert : Conférence : les alternatives à Windows

samedi 4 mars 2017 à 10:00

Le 4 mars 2017 j’anime une conférence intitulée les alternatives à Windows à la médiathèque du Véron à Avoine. Voici un résumé avec les liens vers les sujets abordés.

Lien court vers cet article : https://frama.link/4marsalternatives

Cet article sera complété par l’enregistrement audio de la conférence (si la technique le veut bien).

État des lieux

Windows est le système d’exploitation le plus utilisé sur ordinateur personnel (plus de 91 %) alors que sur les appareils dit « mobiles » (téléphones et tablettes) c’est Google Android qui domine (environ 63 %) – source ZDNet.

Une telle hégémonie sur PC (le terme désigne ici l’ordinateur personnel, ce qui inclut ceux fabriqués par Apple), même si elle est loin d’être nouvelle, pose questions : pourquoi, du point de vue de nombre d’utilisateurs, n’existe-t-il qu’un seul système (même si Apple et Mac OS X disposent d’une certaine visibilité) ? Existe-t-il des alternatives ?

Dans les descriptions des alternatives j’évoquerai bien sûr le cas Android mais m’attarderai peu sur les mobiles, le choix de l’utilisateur étant quasiment inexistant (les matériels sont verrouillés pour éviter de changer de système, ils sont également très divers, contrairement aux PC).

Alternatives et libertés

Windows n’est donc pas le seul système existant, mais sur quels critères choisir une alternative ? Peut-on mettre sur le même plan Mac OS X et Linux ?

Le critère de la liberté me semble fondamental. Liberté de logiciel mais encore plus celle de l’utilisateur. En effet, on peut priver de liberté un utilisateur avec des logiciels libres, Android en est la preuve.

Logiciel libre

Un programme est un logiciel libre si vous, en tant qu’utilisateur de ce programme, avez les quatre libertés essentielles :

  • la liberté d’exécuter le programme comme vous voulez, pour n’importe quel usage (liberté 0) ;
  • la liberté d’étudier le fonctionnement du programme, et de le modifier pour qu’il effectue vos tâches informatiques comme vous le souhaitez (liberté 1) ; l’accès au code source est une condition nécessaire ;
  • la liberté de redistribuer des copies, donc d’aider votre voisin (liberté 2) ;
  • la liberté de distribuer aux autres des copies de vos versions modifiées (liberté 3) ; en faisant cela, vous donnez à toute la communauté une possibilité de profiter de vos changements ; l’accès au code source est une condition nécessaire.

Android est un système basé sur le noyau Linux (un logiciel libre) mais comporte des briques (des éléments) propriétaires. Il ne peut donc être considéré comme un logiciel libre.

Utilisateur libre

Un utilisateur est libre s’il peut utiliser un logiciel de manière anonyme ou s’il a l’entière maîtrise des données personnelles qu’il confie à ce logiciel. Un utilisateur est libre si sa vie privée est préservée.

Cela peut paraître anachronique, mais un ordinateur personnel ou un appareil mobile doit pouvoir fonctionner sans être connecté à quelque réseau que ce soit.

Or, on constate, de plus en plus, des systèmes qui, lors de l’installation ou du premier démarrage, demandent une adresse e-mail ou de créer un compte sur le serveur de l’éditeur du logiciel. C’est le cas de Windows et d’Android (à ma décharge, je n’ai pas testé cela sur un Mac). Même s’il n’est pas obligatoire de donner ce genre d’informations, le système vous incite à croire le contraire.

De plus, sur un système comme Android il est très difficile de se passer de Google Play pour installer des applications : la plupart des éditeurs d’applications ne proposent leur produits que via Google Play (ou l’App Store d’Apple) alors que ceux-ci pourraient être téléchargés directement depuis leurs sites respectifs. Or, utiliser Google Play nécessite d’avoir un compte Google, donc d’accepter les conditions d’utilisations.

La mainmise de Google sur nos vies

Google est avant tout un moteur de recherche extrêmement performant qui a révolutionner la recherche sur le Web au début du siècle. Du coup, il est aujourd’hui utilisé par plus de 90 % des internautes en Europe (moins aux États-Unis ou Microsoft Bing a plus de succès ainsi qu’en Russie et en Chine ou règnent les moteurs de recherches approuvés par l’État).

Google est donc en situation de monopole sur la recherche sur le Web : cela conduit à penser que Google peut choisir le Web auquel il donne accès et nous cacher les sites qui lui déplaisent.

Des services attractifs et bien pensés

Google est aussi un fournisseur de courrier électronique (Gmail). Faîtes le compte autour de vous des personnes qui n’ont pas leur courrier chez Gmail, vous risquez d’être surpris…

Youtube est également un service de Google très populaire et nettement plus utilisé et consulté que Dailymotion ou Vimeo. Puis, il y les services plutôt orientés entreprises comme Google Drive, Google Documents, Google Agenda, dont il est difficile de se passer une fois que l’on y a goûté et confié une masse non négligeable de données.

Mais une traçabilité bien pensée

Petit extrait des règles de confidentialité : « Nos systèmes automatisés analysent vos contenus (y compris les e-mails) afin de vous proposer des fonctionnalités pertinentes sur les produits, telles que des résultats de recherche personnalisés, des publicités sur mesure et la détection des spams et des logiciels malveillants. Cette analyse a lieu lors de l’envoi, de la réception et du stockage des contenus. »

Donc, résumons, si vous avez un téléphone Android, que vous avez un compte Google, que la connexion 3G et le GPS sont activés en permanence (votre batterie se vide donc très vite), Google a donc tout loisir de croiser toutes les informations que vous lui donnez directement ou indirectement (vos déplacements, les sites et vidéos que vous consultez, les mails que vous recevez, etc.) À propos de déplacement, consultez votre historique.

Vous souhaitez quitter Google ? C’est possible mais la route est longue. Commencez par regarder l’initiative Dégooglisons Internet de Framasoft. Vous pouvez aussi changer de moteur de recherche ou encore vous tourner vers un fournisseur de courrier électronique plus éthique comme Newmanity.

Survivre avec Android

Tout d’abord, si vous avez un téléphone Android, vous avez intérêt à faire le ménage dans les applications installées et en fonctionnement. Voici un article qui vous explique comment arrêter les applications tournant en arrière plan sur Android et ainsi éviter des fuites de données et faire durer votre batterie.

Si vous voulez vous passer d’un compte Google et que vous voulez malgré tout installer des applications (fichiers au format APK), vous avez plusieurs possibilités :

Et Linux dans tout ça !

On désigne généralement par Linux une famille de système d’exploitation, initialement pour PC (même si, par exemple, Android est basé sur Linux). Linux n’est en réalité que le noyau, un petit logiciel qui fait l’interface entre le matériel et le reste du système (signaux d’entrée comme le clavier, la souris, la caméra et de sortie comme le son, l’image, l’impression, etc.)

En réalité il convient de parler de distributions Linux qui constituent un ensemble utilisable (noyau, système et applications pour travailler, jouer, flâner, etc.). Il existe une multitude de distributions : des généralistes et des plus spécifiques.

Bases d’une distribution

Une distribution est donc un ensemble comprenant le noyau Linux, le système GNU et un gestionnaire d’installation de logiciels. Cette dernière partie est finalement la plus novatrice : depuis une unique application vous disposez d’un catalogue immense de logiciels (libres mais pas que) que vous pouvez installer d’un clic. Plus besoin d’aller sur le site de Firefox pour installer votre navigateur favori. En plus, les mises à jour sont gérées et Linux vous demande de les effectuer quand vous le souhaitez.

La plupart des distributions existent en version live : à partir d’une image ISO (un gros fichier qui correspond à la copie conforme d’un DVD) que vous pouvez graver sur un DVD ou flasher sur une clé USB vous pouvez démarrer un système Linux sur un ordinateur sans l’installer. Idéal pour essayer, vous faire une idée sans risque pour votre Windows ou votre Mac OS X.

Avantages

Le principal avantage est l’absence de contrainte technique sur les distributions libres : pas de verrou qui vous empêcherait d’effectuer des opérations interdites par l’éditeur.

Vous disposez toujours de logiciels mis à jour (important lorsque des failles de sécurité sont corrigées).

Si vous en avez les capacités, vous pouvez vous débrouiller tout seul pour solutionner les problèmes. Oui, vous rencontrerez des problèmes même avec Linux, c’est inhérent en informatique, mais vous avez la possibilité de les corriger. Sous Windows ou Mac OS X vous pourrez vous heurter à des barrières techniques ou chercher longtemps un paramètre qui devrait pourtant être facile d’accès. Parce que dans la recherche de simplicité et de convivialité, les éditeurs de logiciels propriétaires estiment que vous ne devez pas fourrer votre nez dans les coulisses.

Les distributions comme la plupart des logiciels d’usage courants sont traduits dans un nombre de langues qui n’a pas d’égal dans le monde propriétaire. Vous pourrez trouver des distributions proposant le Breton ou le Klingon.

Vous avez accès à un catalogue de logiciels qui couvre à peu près tous les besoins : dans mon cas, je dispose de logiciels professionnels pour retoucher les photos (GIMP), mettre en page des documents qui sont correctement imprimés chez un imprimeur (Scribus), monter des vidéos qui passent sans problème dans un cinéma (Kdenlive). La liste n’est pas exhaustive. Voir mes réalisations d’impression et de montage vidéo.

Inconvénients

Certains usage spécifiques sont mal couverts, voire pas du tout. Si vous êtes joueur et amateur des derniers jeux à la mode, il vaut mieux rester sous Windows (ou investir dans une console de jeux). Cependant, même s’ils sont peu nombreux, il existe des jeux de qualité sous Linux (certains libres, d’autres pas).

La comptabilité est une activité mal aimée, c’est aussi le cas sous Linux. Mais la tendance se dirige vers les logiciels Web tels que Odoo, donc accessibles par un navigateur Web (Firefox).

Si vous utilisez un logiciel métier, il y a peu de chance qu’il soit multi-plateforme (c’est-à-dire disponible sous Linux et Mac OS X en plus de Windows), c’est donc rédhibitoire, même si là aussi la tendance est aussi aux logiciels Web.

Si vous êtes habitué à utiliser certains logiciels propriétaires qui demandent un temps d’apprentissage conséquent (au hasard, la suite Adobe), il vous faudra pas mal d’efforts et surtout de temps pour basculer sur les équivalents libres. Tout dépend de votre volonté et votre temps disponible.

Enfin, gros inconvénient, Microsoft et les constructeurs de PC se sont entendus pour rendre difficile l’installation de systèmes alternatifs sur les matériels. Il faudra parfois batailler dur pour simplement démarrer depuis une clé USB. Mais cela reste possible, je n’ai essuyé aucun échec à ce jour, même si parfois j’ai eu envie de renoncer.

Généralistes

Les distributions généraliste sont celles qui proposent par défaut des logiciels d’usage très courant (suite bureautique LibreOffice, navigateur Firefox) et une interface assez classique. La plus connue reste Ubuntu même si LinuxMint se révèle la plus utilisée.

Si Ubuntu a grandement contribué à populariser Linux (sous l’impulsion du milliardaire Mark Shuttleworth) son virage « commercial » lui a sans doute fait perdre sa première place au rang des distributions les plus utilisées. En effet, suite à des accords entre Canonical (éditeur d’Ubuntu, dont le siège est situé sur l’île de Man, un paradis fiscal) et Amazon, vous serez pollué par des publicités dans votre usage quotidien. Certes, il est possible de les retirer, mais autant utiliser LinuxMint, qui n’est autre qu’une Ubuntu personnalisée et nettoyée.

Production multimédia

Sujet qui me tient à cœur, la production multimédia dispose de plusieurs distributions dédiées. Par exemple, Ubuntu Studio et AV Linux.

Elles vous proposent par défaut un certains nombre de logiciels pour le travail du son et de l’image (fixe et animée). Une fois installée, vous disposez de tous les outils nécessaires à vos productions.

École

L’école est un milieu où malheureusement le monopole de Microsoft s’exprime pleinement, essentiellement par manque de volonté politique au niveau du ministère de l’Éducation nationale.

AbulÉdu est une solution libre proposant un ensemble de logiciels pédagogiques avec des profils adaptés à l’âge des enfants. Début 2000 AbulÉdu fut développée au sein de l’association Abul à Bordeaux. Elle fut ensuite pérennisée par l’entreprise Ryxéo jusqu’en mai 2016, date à laquelle la société a déposé le bilan, faute d’un modèle économique, pourtant bon, qui a souffert du manque de soutien de l’Éducation nationale.

AbulÉdu existe toujours au sein de l’Abul (qui ne l’avait jamais vraiment quittée).

Protection de la vie privée

En utilisant une distribution Linux vous avez la garantie de ne pas être traqué par des mouchards (contrairement aux systèmes de Microsoft, Google et Apple). Cependant, vos communications ne sont pas protégées et sont lisibles par tous les intermédiaires d’Internet entre vous et votre destinataire (mail ou Web).

Tails est une distribution orientée protection de la vie privée. Elle vous fournit des outils pour être le plus anonyme possible. Elle est utilisé par Edward Snowden, notamment lorsqu’il a communiqué avec des journalistes pour transmettre ses révélations sur les programmes de surveillance de la population par plusieurs agences de renseignements (NSA, GCHQ, etc.) Lire dans le Monde : Tails, l’outil détesté par la NSA, qui veut démocratiser l’anonymat en ligne.

Cet article Conférence : les alternatives à Windows est publié sous licence CC By-SA 4.0 par Dimitri Robert sur Formation logiciel libre - Reprenez le contrôle de votre informatique !.

Gravatar de Dimitri Robert
Original post of Dimitri Robert.Votez pour ce billet sur Planet Libre.

Thuban : Wallabag v2 sur OpenBSD

samedi 4 mars 2017 à 09:26

J'ai réussi à configurer wallabag V2 sur OpenBSD. Ça marche très bien, il fallait seulement lire la documentation donnée. Oui, je l'avoue, j'avais lu à l'arrache la première fois.
Voici donc un petit compte-rendu de la procédure à suivre. Bien entendu, cette partie sera ajoutée dans la prochaine version du guide sur l'auto-hébergement.

Wallabag permet de sauvegarder des pages web pour les
lire plus tard. On le décrit comme une application de "read-it-later". Voici comment l'installer.

On récupère wallabag dans le dossier /tmp :

$ cd /tmp
$ ftp https://wllbg.org/latest-v2-package && tar xvzf latest-v2-package

On installe wallabag dans /var/www/htdocs :

# mv /tmp/release* /var/www/htdocs/wallabag
# chown -R www:daemon /var/www/htdocs/wallabag

On peut désormais éditer le fichier /etc/httpd.conf afin d'ajouter une
section pour wallabag :

server "bag.exemple.net" {
        listen on * port 80
        block return 301 "https://$SERVER_NAME$REQUEST_URI"
}

server "bag.exemple.net" {
        listen on * tls port 443
        root "/htdocs/wallabag/web" 
        directory index app.php
        hsts
		tls {
			certificate "/etc/ssl/acme/votredomaine-fullchain.com.pem"
			key         "/etc/ssl/acme/private/votredomaine-privkey.com.pem"
		}

		# on bloque tous les scripts php sauf celui utile
        location "/*.php"          { block }

		# on reformate l'URL si besoin
        location match "^/[^(app.php)]/(.*)$" {
                block return 301 "https://$SERVER_NAME/app.php/%1"
        }
		location "/" {
                block return 301 "https://$SERVER_NAME/app.php/"
        }
		
		# On sert les pages
        location "/app.php/*" {
                fastcgi socket "/run/php-fpm.sock"
        }
}

Il ne vous reste plus qu'à relancer httpd avec rcctl reload httpd puis à aller sur votre site. Les identifiants par défaut sont wallabag/wallabag. Créez un nouveau compte ou modifiez ce dernier pour terminer l'installation.

Gravatar de Thuban
Original post of Thuban.Votez pour ce billet sur Planet Libre.

System Linux : Convertir un fichier pfx en crt et key

vendredi 3 mars 2017 à 16:45

openssl.png

Convertir c'est bien pendant le Carême...

Extraire la clef :

openssl pkcs12 -in ''votre.pfx'' -nocerts -out ''votre.key''

Extraire le certificat :

openssl pkcs12 -in ''votre.pfx'' -clcerts -nokeys -out ''votre.crt''

Gravatar de System Linux
Original post of System Linux.Votez pour ce billet sur Planet Libre.

blog-libre : Mémo Parameter Expansion

vendredi 3 mars 2017 à 07:00

Dernière mise à jour : 03/03/2017

Parameter Expansion est un ensemble d’opérations intégré à Bash et ksh, il peut parfois avantageusement remplacer l’utilisation de cut/sed/awk (mais il ne remplace pas toutes les possibilités que ces commandes offrent) :

J’ai fait certains choix pour ce mémo :

Les meilleures ressources sur le sujet :
https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
http://wiki.bash-hackers.org/syntax/pe
http://mywiki.wooledge.org/BashFAQ/073

String length

Afficher la longueur de la chaîne de caractères contenue dans la variable (#)

mavariable="Qu'il est beau mon mémo ho ho ho !"; echo ${#mavariable}
34 (la longueur en nombre de caractères contenue dans mavariable, les espaces sont comptés)

Search and replace

Remplacer la première occurence de firefox par chromium-browser (/firefox/chromium-browser)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable/firefox/chromium-browser}
/usr/lib/chromium-browser/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

Remplacer toutes les occurences de firefox par chromium-browser (//firefox/chromium-browser)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable//firefox/chromium-browser}
/usr/lib/chromium-browser/chromium-browser https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

Substring removal

Supprimer la chaîne de caractères la plus courte possible en partant du début jusqu’à ; (#*;)

mavariable="Augier:Cascador/Laurent;Damien;alter A1"; echo ${mavariable#*;}
Damien;alter A1

Supprimer la chaîne de caractères la plus longue possible en partant du début jusqu’à ; (##*;)

mavariable="Augier:Cascador/Laurent;Damien;alter A1"; echo ${mavariable##*;}
alter A1

Supprimer la chaîne de caractères la plus courte possible en partant de la fin jusqu’à : (%:*)

mavariable="Augier:Cascador/Laurent;Damien;alter A1"; echo ${mavariable%:*}
Augier

Supprimer la chaîne de caractères la plus longue possible en partant de la fin jusqu’à ; (%%;*)

mavariable="Augier:Cascador/Laurent;Damien;alter A1"; echo ${mavariable%%;*}
Augier:Cascador/Laurent

Supprimer la chaîne de caractères la plus courte possible en partant de la fin jusqu’à (espace) (% *)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable% *}
/usr/lib/firefox/firefox

Supprimer la chaîne de caractères la plus courte possible en partant du début jusqu’à (espace) (#* )

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable#* }
https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

Supprimer la chaîne de caractères la plus longue possible en partant du début jusqu’à / (##*/)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable##*/}
Shell-Parameter-Expansion.html

Supprimer la chaîne de caractères la plus courte possible en partant du début jusqu’à // (#*//)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable#*//}
www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

Supprimer la chaîne de caractères la plus courte possible en partant de la fin jusqu’à bash (%bash*)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable%bash*}
/usr/lib/firefox/firefox https://www.gnu.org/software/

Supprimer la chaîne de caractères la plus courte possible en partant du début jusqu’à manual (#*manual)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable#*manual}
/html_node/Shell-Parameter-Expansion.html

Supprimer la chaîne de caractères la plus courte possible en partant du début jusqu’à firefox (#*firefox)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable#*firefox}
/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

Supprimer la chaîne de caractères la plus longue possible en partant du début jusqu’à firefox (##*firefox)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable##*firefox}
https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

Supprimer la chaîne de caractères la plus courte possible en partant de la fin jusqu’à firefox (%firefox*)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable%firefox*}
/usr/lib/firefox/

Supprimer la chaîne de caractères la plus longue possible en partant de la fin jusqu’à firefox (%%firefox*)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable%%firefox*}
/usr/lib/

Extract parts of a filename (substring removal)

Extraire uniquement le nom du fichier sans l’extension (%.*)

mavariable="bash_hackers.txt"; echo ${mavariable%.*}
bash_hackers

Extraire uniquement l’extension du fichier (##*.)

mavariable="bash_hackers.txt"; echo ${mavariable##*.}
txt

Extraire uniquement le chemin du fichier (%/*)

mavariable="/home/babar/Blog/bash_hackers.txt"; echo ${mavariable%/*}
/home/babar/Blog

Extraire uniquement le nom du fichier (##*/)

mavariable="/home/babar/Blog/bash_hackers.txt"; echo ${mavariable##*/}
bash_hackers.txt

Case modification

Convertir le premier caractère en majuscule (^)

mavariable="tintouli, carl et cloug sont gentils"; echo ${mavariable^}
Tintouli, carl et cloug sont gentils

Convertir tous les caractères en majuscule (^^)

mavariable="Tintouli, carl et cloug sont gentils"; echo ${mavariable^^}
TINTOULI, CARL ET CLOUG SONT GENTILS

Convertir le premier caractère en minuscule (,)

mavariable="TINTOULI, CARL ET CLOUG SONT GENTILS"; echo ${mavariable,}
tINTOULI, CARL ET CLOUG SONT GENTILS

Convertir tous les caractères en minuscule (,,)

mavariable="tINTOULI, CARL ET CLOUG SONT GENTILS"; echo ${mavariable,,}
tintouli, carl et cloug sont gentils

Inverser la casse du premier caractère (~)

mavariable="Tintouli, Carl et Cloug sont gentils"; echo ${mavariable~}
tintouli, Carl et Cloug sont gentils

Inverser la casse de tous les caractères (~~)

mavariable="tintouli, Carl et Cloug sont gentils"; echo ${mavariable~~}
TINTOULI, cARL ET cLOUG SONT GENTILS

Substring expansion

Se positionner au 5ème caractère puis récupérer les caractères jusqu’à la fin (:5)

mavariable="abcdef.wxyz"; echo ${mavariable:5}
f.wxyz

Se positionner au début puis récupérer 3 caractères (:0:3)

mavariable="abcdef.wxyz"; echo ${mavariable:0:3}
abc

Se positionner au 2ème caractère puis récupérer 4 caractères (:2:4)

mavariable="abcdef.wxyz"; echo ${mavariable:2:4}
cdef

Récupérer 3 caractères en partant de la fin (: -3)

mavariable="abcdef.wxyz"; echo ${mavariable: -3}
xyz

Se positionner au 6ème caractère puis récupérer les caractères jusqu’au 2ème caractère en partant de la fin (:6:-2)

mavariable="abcdef.wxyz"; echo ${mavariable:6:-2}
.wx

Se positionner au 10ème caractère en partant de la fin puis récupérer 2 caractères (: -10:2)

mavariable="abcdef.wxyz"; echo ${mavariable: -10:2}
bc

Se positionner au 7ème caractère en partant de la fin puis récupérer les caractères jusqu’au 3ème caractère en partant de la fin (: -7:-3)

mavariable="abcdef.wxyz"; echo ${mavariable: -7:-3}
ef.w

Se positionner au 9ème caractère en partant de la fin puis récupérer aucun caractère (: -9:0)

mavariable="abcdef.wxyz"; echo ${mavariable: -9:0}
(rien)

Enchaîner mais pas combiner

Il n’est pas possible de combiner les différentes opérations (substring removal, substring expansion, etc.) entre elles, on peut les enchaîner les unes après les autres.

mavariable="/home/babar/Blog/bash_hackers.txt"; tmp_result1=${mavariable##*/}; tmp_result2=${tmp_result1%.*}; result=${tmp_result2/hackers/winners}; echo $result
bash_winners

Pour rappel utiliser ; sur une ligne de commandes revient à faire ceci dans un script (évidemment on mettra des commentaires et en forme le tout).

mavariable="/home/babar/Blog/bash_hackers.txt"
tmp_result1=${mavariable##*/}
tmp_result2=${tmp_result1%.*}
result=${tmp_result2/hackers/winners}
echo $result
bash_winners

Gravatar de blog-libre
Original post of blog-libre.Votez pour ce billet sur Planet Libre.

Articles similaires