[shell] comparaison chaine de caractère

yakuzayang Messages postés 6 Statut Membre -  
jipicy Messages postés 41342 Statut Modérateur -
Bonjour,
j'ai un projet a faire en shell; la création d'une base de donnée.
La je dois créer la fonction qui prend en ligne de commande un truc du style:
delete from table2 where col2 > val2

c'est a dire qui supprime de la table2 toute les lignes ou dans la colonne2 la valeur est > val2

le problème c'est pour les chaîne de caractères. comment je peux comparer 2 chaînes de caractères avec un > et un < ? dans un sens sa a un "sens" au niveau de l'ordre alphabétique
visiblement le shell ne fait pas la comparaison.

j'ai essayer sur un script d'essai de faire
c1="a" c2="b"
if [ "$c1" < "$c2" ] ; then
echo "1"
fi

if [ "$c1" > "$c2" ] ; then
echo "2"
fi

et sa me renvoi 1 et 2 Lol?
comment faire?
A voir également:

1 réponse

jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

Effectivement, en shell on ne peut comparer 2 chaînes que sur leur longueur (= ou != de 0) ou sur leur contenu (chaineA = ou != de chaineB), mais pas sur leur ordre de grandeur (alphabétiquement parlant tout au moins, numériquement parlant c'est faisable).

Pour ce que tu veux faire, il te faudrait extraire toutes les valeurs contenues dans le champ 2, y inclure si besoin ta valeur de référence, les trier (sort), éliminer les redondances (uniq), et ensuite à l'aide d'une boucle, éliminer tout ce qui est avant (ou après) ta valeur de référence...
-3