Page 1 sur 1
[BASH] Script de détection de l'architecture [RÉSOLU]
Publié : sam. 30 janv. 2016, 12:58
par aminnairi
Bonjour à tous !
J'étais en train de me pencher sur un simple script qui va me permettre tout simplement de détecter l'architecture de l'installation. Donc quelque chose de vraiment pas compliqué du tout. Du moins c'est ce que je pensais... Voici mon script :
Code : Tout sélectionner
#!/bin/bash
if [[ $1 == "-g" ]]
then
if [[ "getconf LONG_BIT" == "64" ]]
then
echo "architecture 64 bits détectée"
elif [[ "getconf LONG_BIT" == "32" ]]
then
echo "achitecture 32 bits détectée"
else
echo "architecture non prise en charge pour le moment..."
fi
else
echo "Arguments : "
echo " -i : lance l'installation guidée pour Arch Linux"
echo " -g : lance l'installation de la partie graphique."
echo " \"\" : affiche ce message."
fi
Donc pour cette partie : si on lance le script sans argument on obtient la petite aide (mais ce n'est pas très important) et si on lance avec l'option -g (j'ai enlevé la grosse partie avec l'option -i) on tombe sur la détection de l'architecture... Qui ne fonctionne pas pour moi.
J'ai testé tout d'abord sur ma VM de dev en 64 bits, ça me mettait toujours "architecture non prise en charge". Donc je me dis que c'est peux être la machine alors je me met à installer sur une autre VM rapidemen arch en 32 je test et j'obtiens toujours la même chose...
Request assistance ! Merci par avance

Re: [BASH] Script de détection de l'architecture
Publié : sam. 30 janv. 2016, 13:44
par papajoke
ici tu compares
que 2 chaines entre elles !
Re: [BASH] Script de détection de l'architecture
Publié : sam. 30 janv. 2016, 14:00
par Moviuro
Y'a aussi simplement uname -m
, non ?
Re: [BASH] Script de détection de l'architecture
Publié : sam. 30 janv. 2016, 14:19
par aminnairi
papajoke a écrit :ici tu compares
que 2 chaines entre elles !
Ah l'erreur de débutant j'ai honte...
Moviuro a écrit :Y'a aussi simplement uname -m
, non ?
Oui c'est vrai ! mais j'ai toujours préféré getconf LONG_BIT je trouve ça très simple... et puis j'ai entendu que pour les architectures 32 bits les appellations peuvent être i686 et i386 et pour x86_64 il y a aussi amd64 donc j'étais pas vraiment sûr que mon code soit totalement semi-portable (entre plusieurs machines arch linux tout du moins) donc dans le doute je reste avec getconf LONG_BIT ! Mais merci pour la suggestion
Résumé :
Le code marche donc bien évidemment en ne comparant plus des string mais une commande à une string comme ceci (pour les curieux : )
Code : Tout sélectionner
#!/bin/bash
if [[ $1 == "-g" ]]
then
if [[ $(getconf LONG_BIT) == "64" ]]
then
echo "architecture 64 bits détectée"
elif [[ $(getconf LONG_BIT) == "32" ]]
then
echo "achitecture 32 bits détectée"
else
echo "architecture non prise en charge pour le moment..."
fi
else
echo "Arguments : "
echo " -i : lance l'installation guidée pour Arch Linux"
echo " -g : lance l'installation de la partie graphique."
echo " \"\" : affiche ce message."
fi
J'irais même jusqu'à rajouter une variable avec la commande pour éviter les redondances dans mon code. Merci à vous !

Re: [BASH] Script de détection de l'architecture
Publié : sam. 30 janv. 2016, 14:27
par hopimet
Salut,
Il y avait également cette syntaxe possible :
Code : Tout sélectionner
#!/bin/bash
if [ `getconf LONG_BIT` = 64 ]
then
echo "architecture 64 bits détectée"
elif [ `getconf LONG_BIT` = 32 ]
then
echo "achitecture 32 bits détectée"
else
echo "architecture non prise en charge pour le moment..."
fi
Re: [BASH] Script de détection de l'architecture
Publié : sam. 30 janv. 2016, 14:49
par aminnairi
hopimet a écrit :Salut,
Il y avait également cette syntaxe possible :
Code : Tout sélectionner
#!/bin/bash
if [ `getconf LONG_BIT` = 64 ]
then
echo "architecture 64 bits détectée"
elif [ `getconf LONG_BIT` = 32 ]
then
echo "achitecture 32 bits détectée"
else
echo "architecture non prise en charge pour le moment..."
fi
Salut à toi !
Je ne connaissais pas du tout cette syntaxe. Ça m'a l'air plus simple... Merci de ta contribution !
Re: [BASH] Script de détection de l'architecture [RÉSOLU]
Publié : sam. 30 janv. 2016, 15:24
par papajoke
non non c'est une syntaxe qui nous ramène 10 ans en arrière !
J'irais même jusqu'à rajouter une variable avec la commande pour éviter les redondances dans mon code.
et surtout utiliser tes propres fonctions
Re: [BASH] Script de détection de l'architecture [RÉSOLU]
Publié : sam. 30 janv. 2016, 16:33
par hopimet
papajoke a écrit :non non c'est une syntaxe qui nous ramène 10 ans en arrière !
Bah oui mais je suis vieux moi.

Re: [BASH] Script de détection de l'architecture
Publié : sam. 30 janv. 2016, 18:34
par FoolEcho
aminnairi a écrit :Je ne connaissais pas du tout cette syntaxe. Ça m'a l'air plus simple...
Puisque ça en va là, tu as également:
Code : Tout sélectionner
#!/bin/sh
ARCH=$(getconf LONG_BIT)
case $ARCH in
32) echo "architecture 32 bits détectée";;
64) echo "architecture 64 bits détectée";;
*) echo "architecture non prise en charge pour le moment..."
esac
(plus lisible notamment si tu complexifies le script avec justement d'autres conditions...)
... autrement uname est suffisant à mon avis.
Re: [BASH] Script de détection de l'architecture [RÉSOLU]
Publié : sam. 30 janv. 2016, 19:39
par papajoke
et une autre alternative au if et case :
Code : Tout sélectionner
declare -r ARCH=$(getconf LONG_BIT)
function instarch64() { echo 'install une 64'; }
function instarch32() { echo 'install une 32'; }
type instarch${ARCH} &>/dev/null || {
echo "pas de prise en charge de ${ARCH}"
exit 99
}
instarch${ARCH}
ps: pas forcément la meilleure (+1 pour case)
Re: [BASH] Script de détection de l'architecture [RÉSOLU]
Publié : sam. 30 janv. 2016, 20:19
par hopimet
Oui, case est le plus élégant.
Re: [BASH] Script de détection de l'architecture [RÉSOLU]
Publié : sam. 30 janv. 2016, 20:39
par papajoke
mais l'élégance n'est pas obligatoirement un bon critère, tu fais ton architecture en fonction du cahier des charges
si il doit gérer (plus tard 36 architectures), je ferais à la place du case un système de "plugins" :
Code : Tout sélectionner
declare -r ARCH=$(getconf LONG_BIT)
if [ -r "lib/$ARCH.plugin.sh" ]; then
source "lib/$ARCH.plugin.sh" # include du fichier
install_architecture # même fonction d'entrée dans chaque fichier *.plugin
else
echo "pas de prise en charge de ${ARCH}"
fi
Re: [BASH] Script de détection de l'architecture [RÉSOLU]
Publié : sam. 30 janv. 2016, 23:13
par Moviuro
Re: [BASH] Script de détection de l'architecture [RÉSOLU]
Publié : dim. 31 janv. 2016, 12:02
par aminnairi
Ça marche du feu de dieu ! Je cherchais justement un spell checker pour bash étant donné que y'a pas vraiment d'IDE avec debugger comme en C/C++ pour aider...
Heureusement que je suis passé par ce site parce que j'ai quand même fais deux/trois fautes dans mon code en entier qui aurait pu m...der tout
Et pour tout les autres je ne vous quote-back pas mais merci beaucoup pour votre aide ça fait plaisir !
Re: [BASH] Script de détection de l'architecture [RÉSOLU]
Publié : dim. 31 janv. 2016, 18:09
par hopimet
Ah ouais, c'est cool ça. Je ne connaissais pas. Merci beaucoup !