Pages : 1
#1 Le 01/01/2016, à 11:29
- Pavel37
Problème sur une condition
Bonjour,
Alors voilà, je cherche à me faire un script d'installation de mes logiciels utilisés couramment afin de ne pas avoir à tout réinstallé lors d'une remasterisation, mais je n'arrive pas à faire fonctionner la condition du premier IF :
#Installation des logiciels
for (( i; i < ${#tabLog[@]}; i++ )); do
LogEstInst=$(apt-cache policy ${tabLog[$i]} | grep Installé)
if [[ $(apt-cache policy ${tabLog[$i]} | grep 'Installé') = "Installé : (aucun)" ]] ; then
if ${tabLog[$i]} = "wine"; then
echo "Ajout du dépôt de Wine"
sudo add-apt-repository ppa:ubuntu-wine/ppa -y
echo "Mise à Jour de la liste des paquets"
sudo apt-get update
elif ${tabLog[$i]} = "steam-launcher"; then
echo "Ajout de la clé GPG"
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B05498B7
echo "Ajout du dépôt de Steam"
echo "deb http://repo.steampowered.com/steam/ precise steam" | sudo tee -a /etc/apt/sources.list.d/steam.list
echo "Mise à Jour de la liste des paquets"
sudo apt-get update
fi
echo "Installation de " ${tabLog[$i]}
sudo apt-get install ${tabLog[$i]} -y
echo "Installation de " ${tabLog[$i]} " réussie"
else
echo ${tabLog[$i]} " déjà installé"
fi
done;
Le "$(apt-cache policy ${tabLog[$i]} | grep Installé)" me retourne bien "Installé : (aucun)" mais la condition du IF ne fonctionne pas, avez vous une idée ?
D'avance merci
Pavel
EDIT : je n'avais pas mis le bon code, je viens de le corriger
Dernière modification par Pavel37 (Le 01/01/2016, à 14:46)
N'utilisez pas le pseudo Pavel si vous ne savez pas l'utiliser ;-)
"La vie ne vaut rien mais rien ne vaut la vie"
Hors ligne
#2 Le 01/01/2016, à 11:35
- erresse
Re : Problème sur une condition
Bonjour et bonne année 2016 !
La syntaxe des "if" est incorrecte.
Il faut écrire :
if [ arg1 = arg2 ]; then...
ou
if [[ arg1 != arg2 ]]; then...
Ce ne sont là que deux exemples simples, consulte la documentation pour en connaître davantage.
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#3 Le 01/01/2016, à 13:12
- Watael
Re : Problème sur une condition
en effet, la syntaxe correcte est :
if commande; then...
et une comparaison de chaînes ne constitue pas, à elle seule, une commande; pour ça, tu dois utliser une commande test, ou son alias [, ou encore un test amélioré [[.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 01/01/2016, à 14:40
- Pavel37
Re : Problème sur une condition
Bonjour et bonne année 2016 !
La syntaxe des "if" est incorrecte.
Il faut écrire :if [ arg1 = arg2 ]; then... ou if [[ arg1 != arg2 ]]; then...
Ce ne sont là que deux exemples simples, consulte la documentation pour en connaître davantage.
Pour le coup du "=" au lieu de "==" cela dépend des langages, une petite erreur de syntaxe, j'ai corrigé mon post ^^.
@watael : le IF ne fonctionne pas de la façon suivante :
if commande qui retourne vrai ou faux: then
?
Si c'est le cas une comparaison suffit non ?
Par contre j'avoue ne pas trop comprendre ce que tu entends par "test", "alias", "test amélioré", du coup si tu pouvais m'expliquer un peu plus en détail, cela serait sympa ^^
EDIT : je n'avais pas mis le bon code, je viens de le corriger
Dernière modification par Pavel37 (Le 01/01/2016, à 14:46)
N'utilisez pas le pseudo Pavel si vous ne savez pas l'utiliser ;-)
"La vie ne vaut rien mais rien ne vaut la vie"
Hors ligne
#5 Le 01/01/2016, à 15:34
- Watael
Re : Problème sur une condition
comment le dire autrement : comparer des chaînes avec un signe égal ne constitue pas une commande pour le shell.
c'est comme si tu essayais de mettre des livres au mur, sans mettre d'étagère !
test est une commande, et [ est un alias (un autre nom pour une même fonction) pour celle-ci.
la commande test possède des opérateurs (cf. help test), tels que le signe égal qui permet de comparer des chaînes, et -eq qui permet de comparer des nombres entiers.
= est POSIX, et fonctionnera dans tous les shell "issus" (pour faire court) du Bourne shell (ash, dash, bash, ksh...)
== est une tolérance de bash, mais ne fonctionera pas avec dash, par exemple.
un test amélioré est initié par [[.
Il permet entre autre de comparer une chaîne à un développement de chemin* (mis en évidence par ==), ou à une regex (avec =~).
* voir man bash
Dernière modification par Watael (Le 01/01/2016, à 15:40)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne