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

erresse a écrit :

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