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 22/05/2013, à 02:04

fnux

[Résolu] Nouveau problème de syntaxe avec bash (ou sh).

Bonjour tout le monde,

Me voici face à un nouveau problème que je n'arrive pas à résoudre :

la commande

echo $LANG | cut -c1,2

me donne bien les deux premières lettres de $LANG soit par exemple : "us" pour une version anglaise, ou "fr" pour une version française.

Mais ce que j'aimerai faire est affecter ce résultat à une variable.

Exemple :

#!/bin/sh
LANGUAGE=$LANG | cut -c1,2
echo $LANGUAGE

Bien sur, ça ne marche pas comme ça. mad

J'ai essayé avec des parenthèses et des crochets, mais je ne trouve pas la bonne syntaxe (car je pense que c'est possible mais que je m'y prend mal). hmm

Merci d'avance de toute aide à ce sujet.

Dernière modification par fnux (Le 23/05/2013, à 01:58)


N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
FWPBLA - The Froggies West Palm Beach Linux Association.

Hors ligne

#2 Le 22/05/2013, à 02:21

Watael

Re : [Résolu] Nouveau problème de syntaxe avec bash (ou sh).

salut,

le problème ne vient évidemment pas de bash, mais de ce que tu crois pouvoir t'en servir sans lire la documentation !

l'opération que tu veux effectuer s'appelle Substitution de commande (regarde dans le man)

mais ça peut être fait avec le Remplacement des paramètres (idem)

echo "${LANG%_*}
fr

si tu veux utiliser bash, adapte le shebang.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 22/05/2013, à 05:27

grim7reaper

Re : [Résolu] Nouveau problème de syntaxe avec bash (ou sh).

Salut,

@fnux : 2 syntaxes possibles :
avec les backticks `` :

#!/bin/sh
LANGUAGE=`echo $LANG | cut -c1,2`
echo $LANGUAGE

Avec $() :

#!/bin/sh
LANGUAGE=$(echo $LANG | cut -c1,2)
echo $LANGUAGE

Sachant que l’utilisation de $() est recommandé (plus simple que `` en cas d’imbrications).

Après, la solution de Watael fonctionne aussi, mais c’est un bashisme (donc ton script sera dépendant de bash et pourrait ne pas fonctionner sur d’autres shell).
Si tu veux être spécifique à Bash, tu peux même faire :

LANGUAGE=${LANG:0:2}

À toi de voir ce que tu veux faire smile



Watael a écrit :

le problème ne vient évidemment pas de bash, mais de ce que tu crois pouvoir t'en servir sans lire la documentation !

Tu es très aimable toi dis donc.

Watael a écrit :

l'opération que tu veux effectuer s'appelle Substitution de commande (regarde dans le man)

Oui, C’est ce qu’il veut faire et contrairement à ce que que tu sembles penser, ça fonctionne très bien en sh.

Dernière modification par grim7reaper (Le 22/05/2013, à 05:30)

Hors ligne

#4 Le 22/05/2013, à 05:59

Watael

Re : [Résolu] Nouveau problème de syntaxe avec bash (ou sh).

contrairement à ce que que tu sembles penser, ça fonctionne très bien en sh.

où ai-je dit le contraire ?

La deuxième méthode, que je montre, est totalement POSIX, c'est pourquoi je l'ai proposée.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 22/05/2013, à 07:49

grim7reaper

Re : [Résolu] Nouveau problème de syntaxe avec bash (ou sh).

Watael a écrit :

contrairement à ce que que tu sembles penser, ça fonctionne très bien en sh.

où ai-je dit le contraire ?

Bah si ce n’est pas ce que tu voulais dire, alors pourquoi dire :

Watael a écrit :

si tu veux utiliser bash, adapte le shebang.

?

Watael a écrit :

La deuxième méthode, que je montre, est totalement POSIX, c'est pourquoi je l'ai proposée.

Exact. mea culpa sur ce point.

Dernière modification par grim7reaper (Le 22/05/2013, à 07:51)

Hors ligne

#6 Le 22/05/2013, à 09:05

tiramiseb

Re : [Résolu] Nouveau problème de syntaxe avec bash (ou sh).

Salut,

J'ajouterais juste une chose : la variable LANGUAGE est une variable d'environnement qui peut exister dans certains environnements, si tu souhaites faire un truc spécifique je te conseille de choisir un autre nom de variable...
http://www.gnu.org/software/gettext/man … ables.html

Hors ligne

#7 Le 22/05/2013, à 10:56

Watael

Re : [Résolu] Nouveau problème de syntaxe avec bash (ou sh).

Bah si ce n’est pas ce que tu voulais dire, alors pourquoi dire :

Watael a écrit :

    si tu veux utiliser bash, adapte le shebang.

?

parce que /bin/sh n'est pas toujours bash (sur les sytèmes Debian(-like), par défaut, c'est dash), donc si on écrit un script qui contient des éléments non-POSIX, il est préférable de le spécifier à celui (humain ou noyau) qui lira le script.
Et inversement, si on écrit un script qui ne contient que des éléments POSIX, pourquoi appeler bash.

+1 tiramiseb
C'est une convention (pas toujours respectée dans les scripts systèmes, mais les personnes qui les écrivent connaissent parfaitement l'environnement) :
seules les variables d'environnement doivent être entièrement en majuscules.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 22/05/2013, à 18:20

grim7reaper

Re : [Résolu] Nouveau problème de syntaxe avec bash (ou sh).

Watael a écrit :

Bah si ce n’est pas ce que tu voulais dire, alors pourquoi dire :

Watael a écrit :

    si tu veux utiliser bash, adapte le shebang.

?

parce que /bin/sh n'est pas toujours bash (sur les sytèmes Debian(-like), par défaut, c'est dash), donc si on écrit un script qui contient des éléments non-POSIX, il est préférable de le spécifier à celui (humain ou noyau) qui lira le script.
Et inversement, si on écrit un script qui ne contient que des éléments POSIX, pourquoi appeler bash.

Ha, juste pour ça…
Ça semble évident quand même.

Hors ligne

#9 Le 22/05/2013, à 20:53

fnux

Re : [Résolu] Nouveau problème de syntaxe avec bash (ou sh).

Salut Watael,

Watael a écrit :

salut,

le problème ne vient évidemment pas de bash, mais de ce que tu crois pouvoir t'en servir sans lire la documentation !

Ai-je dit que bash (ou sh) était le problème ?

Non ! Je n'ai simplement dit que je ne trouvais pas la solution à un problème donné et que je m'y prenais surement très mal !

Quand à la lecture des "man" (celui de BASH fait 5.375 lignes), oui je les lit mais je n'y trouve pas forcément de réponse.

Ce que je vais te dire ci-dessous n'est qu'un simple point de vue personnel et en aucun cas une critique !

Presque tous les "man" sont faits pour des gens qui ont déjà une très bonne connaissance d'Unix (ou de ses dérivés comme les distributions Linux).

S'il les "man" présentent en effet généralement toutes les options d'une commande donnée, aucun (ou presque aucun) d'entre eux ne présente des exemples clairs d'utilisation.

Je sais bien que cela représente un travail considérable que de documenter correctement de tels "man" (dans ma carrière et au bon vieux temps d'OS/2, j'ai personnellement écrit des manuels utilisateurs de plus de 700 pages avec exemples à la clef et même captures d'écran quand c'était possible -> et je pense donc savoir de quoi je parle ici), mais cela serait surement le moyen de rendre l'accès à Linux (en général) bien plus facile pour des débutants qui découvrent cet univers, ce qui avec les "man" actuels n'est pas du tout le cas.

Et pour conclure sur ce point en regard de ma question initiale, merci de me dire où dans "man bash" je peux imaginer de résoudre ma question sur la mauvaise syntaxe de ma commande ?

Ceci dit, merci quand même de ta proposition.

Et merci aussi à tiramiseb et grim7reaper pour leurs explications qui sont toujours bienvenues.

Pour info, mon but final est d'écrire un script d'installation de différents outils non seulement multi lingues (Français, Anglais, Allemand, Italien, Espagnol et Néerlandaisau début), mais aussi (et c'est très présomptueux de ma part, je le reconnais) multi distributions : Debian, Ubuntu et ses variantes Kubuntu, Lubuntu, Xubuntu et Mint, mais aussi pour Arch et Fedora (RedHat).

D'ailleurs, à ce propos, je recherche les équivalents des commandes suivantes pour Arch et Fedora si elles existent :

- apt-get -> pacman pour Arch -> yum pour Fedora
- apt-get update ->
- apt-get -y install ->
- apt-get autoclean ->
- apt-get autoremove --purge ->

Merci d'avance de tout conseil.

Dernière modification par fnux (Le 22/05/2013, à 20:56)


N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
FWPBLA - The Froggies West Palm Beach Linux Association.

Hors ligne

#10 Le 22/05/2013, à 20:59

tiramiseb

Re : [Résolu] Nouveau problème de syntaxe avec bash (ou sh).

S'il les "man" présentent en effet généralement toutes les options d'une commande donnée, aucun (ou presque aucun) d'entre eux ne présente des exemples clairs d'utilisation.

Pourtant, quand je lis un man je vais très souvent voir la section "EXAMPLES", qui est souvent là et qui est souvent bien utile...

Hors ligne

#11 Le 22/05/2013, à 21:25

fnux

Re : [Résolu] Nouveau problème de syntaxe avec bash (ou sh).

Salut tiramiseb,

tiramiseb a écrit :

Pourtant, quand je lis un man je vais très souvent voir la section "EXAMPLES", qui est souvent là et qui est souvent bien utile...

Je dois être vraiment "naze" car je n'ai pas encore vu ni compris comment lire les exemples quand il y en a ! hmm

Exemple avec "man bash" ?

Dernière modification par fnux (Le 22/05/2013, à 21:27)


N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
FWPBLA - The Froggies West Palm Beach Linux Association.

Hors ligne

#12 Le 22/05/2013, à 21:29

Watael

Re : [Résolu] Nouveau problème de syntaxe avec bash (ou sh).

fnux a écrit :

merci de me dire où dans "man bash"

c'est pourquoi certaines parties de mon message sont en italique.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#13 Le 22/05/2013, à 21:44

tiramiseb

Re : [Résolu] Nouveau problème de syntaxe avec bash (ou sh).

fnux a écrit :
tiramiseb a écrit :

Pourtant, quand je lis un man je vais très souvent voir la section "EXAMPLES", qui est souvent là et qui est souvent bien utile...

Je dois être vraiment "naze" car je n'ai pas encore vu ni compris comment lire les exemples quand il y en a ! hmm

Exemple avec "man bash" ?

La manpage de bash est le parfait contre-exemple, bash étant un programme particulièrement complexe.
Et de nombreuses manpage sont pour des programmes tellement simples que des exemples sont inutiles ("ls" par exemple).



Presque tous les "man" sont faits pour des gens qui ont déjà une très bonne connaissance d'Unix (ou de ses dérivés comme les distributions Linux).

Non, les manpages sont faites pour des gens qui savent manipuler la ligne de commande, c'est tout...

Hors ligne

#14 Le 23/05/2013, à 00:41

fnux

Re : [Résolu] Nouveau problème de syntaxe avec bash (ou sh).

Salut tiramiseb,

tiramiseb a écrit :

Presque tous les "man" sont faits pour des gens qui ont déjà une très bonne connaissance d'Unix (ou de ses dérivés comme les distributions Linux).

Non, les manpages sont faites pour des gens qui savent manipuler la ligne de commande, c'est tout...

CQFD mais j'apprécie sincèrement le sens de ta nuance lol

En attendant, je rame... tongue mais je ne lâche pas le bout.


N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
FWPBLA - The Froggies West Palm Beach Linux Association.

Hors ligne

#15 Le 23/05/2013, à 00:43

fnux

Re : [Résolu] Nouveau problème de syntaxe avec bash (ou sh).

Salut Watael,

Watael a écrit :
fnux a écrit :

merci de me dire où dans "man bash"

c'est pourquoi certaines parties de mon message sont en italique.

Désolé mais je n'avais pas remarqué ! Maintenant j'y ferai attention. Merci de ta précision.


N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
FWPBLA - The Froggies West Palm Beach Linux Association.

Hors ligne