[BASH] Script de détection de l'architecture [RÉSOLU]

Questions et astuces concernant l'installation et la configuration d'archlinux
Répondre
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

[BASH] Script de détection de l'architecture [RÉSOLU]

Message 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 :)
Dernière modification par aminnairi le sam. 30 janv. 2016, 14:49, modifié 1 fois.
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Avatar de l’utilisateur
papajoke
Elfe
Messages : 781
Inscription : sam. 30 août 2014, 19:54

Re: [BASH] Script de détection de l'architecture

Message par papajoke »

ici tu compares que 2 chaines entre elles !

Code : Tout sélectionner

(( $(getconf LONG_BIT) == 64 ))
Arch stable - Kde 5 / zsh - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
Moviuro
Elfe
Messages : 765
Inscription : dim. 17 juin 2012, 22:49

Re: [BASH] Script de détection de l'architecture

Message par Moviuro »

Y'a aussi simplement uname -m, non ?
psycho : Latitude E6430 ; BTRFS over LUKS, UEFI & secureboot
schizo : Acer 8942G ; KDE 4, BTRFS over LUKS ; W7 (prend la poussière)
toxo : i5-6600K, bspwm, VM W10 en PCI-passthrough
deadman : Lenovo Thinkcenter, OpenBSD 6.0-stable
popho.be : Kimsufi KS-3, FreeBSD 11.0
Loi de Murphy : Le jour où tu as besoin d'une backup, tu te dis que tu aurais dû en mettre en place
Venez sur IRC en plus du forum !
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

Re: [BASH] Script de détection de l'architecture

Message par aminnairi »

papajoke a écrit :ici tu compares que 2 chaines entre elles !

Code : Tout sélectionner

(( $(getconf LONG_BIT) == 64 ))
Ah l'erreur de débutant j'ai honte... :bouletdujour:
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 ! :D
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
hopimet
Elfe
Messages : 996
Inscription : mer. 14 mars 2012, 22:48

Re: [BASH] Script de détection de l'architecture

Message 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
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

Re: [BASH] Script de détection de l'architecture

Message 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 !
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Avatar de l’utilisateur
papajoke
Elfe
Messages : 781
Inscription : sam. 30 août 2014, 19:54

Re: [BASH] Script de détection de l'architecture [RÉSOLU]

Message 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
Arch stable - Kde 5 / zsh - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
hopimet
Elfe
Messages : 996
Inscription : mer. 14 mars 2012, 22:48

Re: [BASH] Script de détection de l'architecture [RÉSOLU]

Message 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. :lol:
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10707
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [BASH] Script de détection de l'architecture

Message 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.
«The following statement is not true. The previous statement is true.» :nage:
Avatar de l’utilisateur
papajoke
Elfe
Messages : 781
Inscription : sam. 30 août 2014, 19:54

Re: [BASH] Script de détection de l'architecture [RÉSOLU]

Message 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)
Arch stable - Kde 5 / zsh - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
hopimet
Elfe
Messages : 996
Inscription : mer. 14 mars 2012, 22:48

Re: [BASH] Script de détection de l'architecture [RÉSOLU]

Message par hopimet »

Oui, case est le plus élégant.
Avatar de l’utilisateur
papajoke
Elfe
Messages : 781
Inscription : sam. 30 août 2014, 19:54

Re: [BASH] Script de détection de l'architecture [RÉSOLU]

Message 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
Arch stable - Kde 5 / zsh - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
Moviuro
Elfe
Messages : 765
Inscription : dim. 17 juin 2012, 22:49

Re: [BASH] Script de détection de l'architecture [RÉSOLU]

Message par Moviuro »

Et comme d'hab : http://shellcheck.net
psycho : Latitude E6430 ; BTRFS over LUKS, UEFI & secureboot
schizo : Acer 8942G ; KDE 4, BTRFS over LUKS ; W7 (prend la poussière)
toxo : i5-6600K, bspwm, VM W10 en PCI-passthrough
deadman : Lenovo Thinkcenter, OpenBSD 6.0-stable
popho.be : Kimsufi KS-3, FreeBSD 11.0
Loi de Murphy : Le jour où tu as besoin d'une backup, tu te dis que tu aurais dû en mettre en place
Venez sur IRC en plus du forum !
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

Re: [BASH] Script de détection de l'architecture [RÉSOLU]

Message par aminnairi »

Moviuro a écrit :Et comme d'hab : http://shellcheck.net
Ç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 :lol:

Et pour tout les autres je ne vous quote-back pas mais merci beaucoup pour votre aide ça fait plaisir !
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
hopimet
Elfe
Messages : 996
Inscription : mer. 14 mars 2012, 22:48

Re: [BASH] Script de détection de l'architecture [RÉSOLU]

Message par hopimet »

Moviuro a écrit :Et comme d'hab : http://shellcheck.net
Ah ouais, c'est cool ça. Je ne connaissais pas. Merci beaucoup !
Répondre