Pages : 1
#1 Le 01/08/2008, à 16:28
- wido
[RÉSOLU] bash simplifier le script
comment je peux modifier mon script pour que ce soit beaucoup plus simple , car la moitié des commandes sont en double , là actuellement il y a une erreur , je le sais , c'est parce que j'ai intégré deux fois la fonction (read,case, esac) dans une même portion de code , je n'arrive pas à éviter cela, d'où ce post , je sais pas si c'est possible d'utiliser des genres d'alias que je mets en début de script et je les utilises au moment voulu.
ce script permet de télécharger et d'installer automatiquement le driver de nvidia, en posant quelque question à chaque fois.
#!/bin/sh
#Script du 01/08/2008 16h30
#
#
#
#---choix de l'architecture-----------
echo -n "type d'architecture, recopier cette commande :`uname -m`: "
read architecture
case $architecture in
x86)
#---téléchargement du driver 173.14.12 pour 32 bits------
echo -n "télécharger les derniers drivers (173.14.12) ? (oui/non) "
read reponse
case $reponse in
oui)
echo "téléchargement en cours..."
wget -c http://fr.download.nvidia.com/XFree86/Linux-x86/173.14.12/NVIDIA-Linux-x86-173.14.12-pkg1.run ;;
non)
echo "vérifier si le driver est bien dans le bon dossier"
ls ~/ ;;
*)
echo "erreur d'écriture" ;;
esac
#----demande de sauvergarder le xorg----------
echo -n "sauvergarder le fichier xorg.conf ? (oui/non) "
read xorg
case $xorg in
oui)
echo "sauvergarde en cours..."
sudo cp /etc/X11/xorg.conf /etc/X11/xorg.backup
echo "effacer ancien driver Nvidia"
sudo apt-get remove --purge nvidia*
echo "installation des paquets nécessaires"
sudo apt-get install build-essential linux-headers-`uname -r` xserver-xorg-dev nvidia-settings
echo "arreter le serveur X"
sudo /etc/init.d/gdm stop
echo "installation du nouveau driver"
sudo sh ~/NVIDIA-Linux-x86-173.14.12-pkg1.run
echo "demarrage du serveur X"
sudo /etc/init.d/gdm start ;;
non)
echo "effacer ancien driver Nvidia"
sudo apt-get remove --purge nvidia*
echo "installation des paquets nécessaires"
sudo apt-get install build-essential linux-headers-`uname -r` xserver-xorg-dev nvidia-settings
echo "arreter le serveur X"
sudo /etc/init.d/gdm stop
echo "installation du nouveau driver"
sudo sh ~/NVIDIA-Linux-x86-173.14.12-pkg1.run
echo "demarrage du serveur X"
sudo /etc/init.d/gdm start ;;
*)
echo "erreur d'écriture" ;;
esac
x86_64)
#---téléchargement du driver 173.14.12 pour 64 bits------
echo -n "télécharger les derniers drivers (173.14.12) ? (oui/non) "
read reponse
case $reponse in
oui)
echo "téléchargement en cours..."
wget -c http://fr.download.nvidia.com/XFree86/Linux-x86_64/173.14.12/NVIDIA-Linux-x86_64-173.14.12-pkg2.run ;;
non)
echo "vérifier si le driver est bien dans le bon dossier"
ls ~/ ;;
*)
echo "erreur d'écriture" ;;
esac
#----demande de sauvergarder le xorg----------
echo -n "sauvergarder le fichier xorg.conf ? (oui/non) "
read xorg
case $xorg in
oui)
echo "sauvergarde en cours..."
sudo cp /etc/X11/xorg.conf /etc/X11/xorg.backup
echo "effacer ancien driver Nvidia"
sudo apt-get remove --purge nvidia*
echo "installation des paquets nécessaires"
sudo apt-get install build-essential linux-headers-`uname -r` xserver-xorg-dev nvidia-settings
echo "arreter le serveur X"
sudo /etc/init.d/gdm stop
echo "installation du nouveau driver"
sudo sh ~/NVIDIA-Linux-x86_64-173.14.12-pkg2.run
echo "demarrage du serveur X"
sudo /etc/init.d/gdm start ;;
non)
echo "effacer ancien driver Nvidia"
sudo apt-get remove --purge nvidia*
echo "installation des paquets nécessaires"
sudo apt-get install build-essential linux-headers-`uname -r` xserver-xorg-dev nvidia-settings
echo "arreter le serveur X"
sudo /etc/init.d/gdm stop
echo "installation du nouveau driver"
sudo sh ~/NVIDIA-Linux-x86_64-173.14.12-pkg2.run
echo "demarrage du serveur X"
sudo /etc/init.d/gdm start ;;
*)
echo "erreur d'écriture" ;;
esac
Dernière modification par wido (Le 01/08/2008, à 20:46)
Hors ligne
#2 Le 01/08/2008, à 16:36
- Guizmo.7
Re : [RÉSOLU] bash simplifier le script
Et pourquoi ne pas suivre une méthode simple :
1) Récupération des informations
2) Traitements
3) Affichage des résultats
Par exemple tu demandes juste une fois si il faut sauver le Xorg et une fois quelle architecture est concerné et tu fais ensuite tes traitements en fonction de ces réponses.
Je pense que tu peux économiser ainsi au moins un case.
Un pas après l'autre, la petite créature verte avance !
Hors ligne
#3 Le 01/08/2008, à 16:42
- wido
Re : [RÉSOLU] bash simplifier le script
tu n'aurais pas un lien ou un exemple pour la méthode simple , je débute, je fais ça par tatonnement
j'utilise http://lea-linux.org/cached/index/Dev-shell_script.html# je teste les exemples et je vois ce que ça fait et j'applique si j'en suis convaincu
EDIT: je comprends ce que tu veux dire par "Récupération des informations"
mais c'est dans traitement que je peche
Dernière modification par wido (Le 01/08/2008, à 16:49)
Hors ligne
#4 Le 01/08/2008, à 20:45
- wido
Re : [RÉSOLU] bash simplifier le script
#!/bin/bash
#Script du 03/08/2008 14h25
#crée par wido
#script 0.2
fct_debut ()
{
echo
echo "Script permettant d'installer le driver de nvidia"
echo "Le driver téléchargé sera enregistré dans /home/$USER"
echo "votre ordinateur a une architecture : `uname -m`"
echo
echo "Choisissez une option [1-8]"
echo "1 : Backup du fichier xorg.conf? "
echo "2 : Effacer l'ancien driver? "
echo "3 : Installer le driver pour l'architecture en x86 (32 bits)?"
echo "4 : Télécharger le driver (173.14.12) pour x86 (32 bits)?"
echo
echo "5 : Installer le driver pour l'architecture en x86_64 (64 bits)?"
echo "6 : Télécharger le driver (173.14.12) pour x86_64 (64 bits)?"
echo "7 : Ouvrir le xorg.conf ?"
echo "8 : redemarrer le serveur X"
echo "9 : Sortir"
echo
echo "Veuillez choisir la réponse:"
read option
case $option in
1)
fct_savexorg;;
2)
fct_deletenvidia;;
3)
fct_installnvidia32;;
4)
fct_dwlnvidia32;;
5)
fct_installnvidia64;;
6)
fct_dwlnvidia64;;
7)
fct_openxorg;;
8)
fct_rebootgdm;;
9)
exit;;
*)
echo "erreur de frappe"
fct_debut;;
esac
}
fct_savexorg ()
{
echo
echo "Faire un backup du fichier xorg.conf (o/n)?"
read xorg
case $xorg in
o)
echo "Sauvergarde de xorg.conf en cours ..."
echo "le fichier sera sous le nom de /etc/X11/xorg.backup"
cp /etc/X11/xorg.conf /etc/X11/xorg.backup
echo "Backup effectué"
fct_debut;;
n)
fct_debut;;
*)
echo "Erreur de frappe"
fct_savexorg;;
esac
}
fct_deletenvidia ()
{
echo "Effacer l'ancien driver Nvidia ? (o/n)?"
read deadnvidia
case $deadnvidia in
o)
echo "Effacement en cours ..."
apt-get remove --purge nvidia*
echo "Effacement terminé."
fct_debut;;
n)
fct_debut;;
*)
echo "Erreur de frappe"
fct_debut;;
esac
}
fct_installnvidia32 ()
{
echo "Installer le driver Nvidia ? (o/n)?"
read install32
case $install32 in
o)
echo "Installation des paquets nécessaires pour compiler le driver"
apt-get install build-essential linux-headers-`uname -r` xserver-xorg-dev nvidia-settings
echo "Installation des paquets effectués"
echo "Arrêter le serveur X"
/etc/init.d/gdm stop
echo "Installation du nouveau driver"
sh ~/NVIDIA-Linux-x86-173.14.12-pkg1.run
echo "Demarrage du serveur X"
/etc/init.d/gdm start;;
n)
fct_debut;;
*)
echo "Erreur de frappe"
fct_debut;;
esac
}
fct_dwlnvidia32 ()
{
echo "Télécharger le driver Nvidia ? (o/n)?"
read dwl32
case $dwl32 in
o)
echo "Téléchargement de la version 173.14.12 en 32 bits"
cd ~/
wget http://fr.download.nvidia.com/XFree86/Linux-x86/173.14.12/NVIDIA-Linux-x86-173.14.12-pkg1.run
echo "Téléchargement effectué"
fct_debut;;
n)
fct_debut;;
*)
echo "Erreur de frappe"
fct_debut;;
esac
}
fct_installnvidia64 ()
{
echo "Installer le driver Nvidia ? (o/n)?"
read install64
case $install64 in
o)
echo "Installation des paquets nécessaires pour compiler le driver"
apt-get install build-essential linux-headers-`uname -r` xserver-xorg-dev nvidia-settings
echo "Installation des paquets effectués"
echo "Arrêter le serveur X"
/etc/init.d/gdm stop
echo "Installation du nouveau driver"
sh ~/NVIDIA-Linux-x86_64-173.14.12-pkg2.run
echo "Démarrage du serveur X"
/etc/init.d/gdm start;;
n)
fct_debut;;
*)
echo "Erreur de frappe"
fct_debut;;
esac
}
fct_dwlnvidia64 ()
{
echo "Télécharger le driver Nvidia ? (o/n)?"
read dwl64
case $dwl64 in
o)
echo "Téléchargement de la version 173.14.12 en 64 bits"
cd ~/
wget http://fr.download.nvidia.com/XFree86/Linux-x86_64/173.14.12/NVIDIA-Linux-x86_64-173.14.12-pkg2.run
echo "Téléchargement effectué"
fct_debut;;
n)
fct_debut;;
*)
echo "Erreur de frappe"
fct_debut;;
esac
}
fct_openxorg ()
{
echo "Ouvrir le fichier xorg.conf ? (o/n)?"
read openxorg
case $openxorg in
o)
echo "Ouvrir le fichier xorg"
gedit /etc/X11/xorg.conf
fct_debut;;
n)
fct_debut;;
*)
echo "Erreur de frappe"
fct_debut;;
esac
}
fct_rebootgdm ()
{
echo "redémarrer le serveur X ? (o/n)"
read rebootgdm
case $rebootgdm in
o)
/etc/init.d/gdm stop
/etc/init.d/gdm start;;
n)
fct_debut;;
*)
echo "Erreur de frappe"
fct_debut;;
esac
}
if [ $(whoami) != "root" ]
then
# on affiche un message d'erreur et le script se termine
echo "Vous devez etre super-utilisateur pour executer ce script."
exit
else
fct_debut
fi
Dernière modification par wido (Le 03/08/2008, à 13:26)
Hors ligne
#5 Le 02/08/2008, à 12:40
- Tha Tawa'S
Re : [RÉSOLU] bash simplifier le script
Salut,
bien vu pour le script; tu crois que je pourrais l utiliser sur un laptop asus V1S avec carte graphique 8600M GT ??
As tu vu un changement dans l affichage, par exemple meilleure fluidité, moins de ressources consommées ..., avec ce nouveau driver ??
bye
Si tu tapes ta tete contre une cruche et que ca sonne creux... ce n est peut-etre pas la cruche qui est creuse....
Hors ligne
#6 Le 02/08/2008, à 17:49
- wido
Re : [RÉSOLU] bash simplifier le script
je pense que tu pourras l'utiliser
je n'ai pas vu de différence ,avec mes deux cartes graphiques en SLI
si tu vois des bugs ou amélioration , n'hésite pas , j'apprends à faire des scripts
question : le -eq ça veut dire équivalent à ?
Dernière modification par wido (Le 03/08/2008, à 12:37)
Hors ligne
#7 Le 02/08/2008, à 19:14
- Tha Tawa'S
Re : [RÉSOLU] bash simplifier le script
ok merci.
Si tu tapes ta tete contre une cruche et que ca sonne creux... ce n est peut-etre pas la cruche qui est creuse....
Hors ligne
#8 Le 02/08/2008, à 20:41
- valAa
Re : [RÉSOLU] bash simplifier le script
salut,
juste une petite remarque, je sais pas si tout le monde sera d'accord avec moi...
alors voilà je pense qu'il faudrait virer les "sudo" du script, et laisser à l'utilisateur le soin de le lancer en root... cela le rendrait un peu plus portable, selon sa configuration un utilisateur va utiliser "sudo" un autre "su" ou "su -"....
par contre il faudrait du coup prévoir un ptit message d'erreur dans le cas ou le script ne serait pas lancé avec des droits suffisants.
je trouve ça plus propre parce que l'utilisation à 100% de "sudo" est une particularité d'ubuntu, or ton script n'a aucune raison de ne pas fonctionner sur une debian fraîchement installée par exemple, si ce n'étaient ces "sudo".
my 2 cents...
Dernière modification par valAa (Le 02/08/2008, à 20:43)
Hors ligne
#9 Le 02/08/2008, à 21:39
- wido
Re : [RÉSOLU] bash simplifier le script
je sais pas faire , mais si tu as un bout de code je l'intégrerai
j'ai ajouté un
sudo -K
après la commande en sudo
Dernière modification par wido (Le 02/08/2008, à 21:56)
Hors ligne
#10 Le 03/08/2008, à 11:22
- Guizmo.7
Re : [RÉSOLU] bash simplifier le script
Ce qu'il dit est très pertinent, il faudrait enlever tous les "sudo" de ton script. Comme ça c'est à l'utilisateur de choisir sa méthode d'accès au super-utilisateur.
Je te propose de faire ça :
if [ whoami -eq "root" ]
then
# met ton script ici car l'utilisateur est le root
else
# on affiche un message d'erreur et le script se termine
echo "Vous devez etre super-utilisateur pour executer ce script.
fi
Qu'en penses-tu ?
Un pas après l'autre, la petite créature verte avance !
Hors ligne
#11 Le 03/08/2008, à 12:32
- wido
Re : [RÉSOLU] bash simplifier le script
merci c'est fait, j'ai peur c'est que le temps d'installer le driver l'utilisateur ne soit plus en root avec le timeout
la commande en fonctionne pas même en passant en root cela ne fonctionne pas
mais cela fonctionne :
if [ $(whoami) != "root" ]
then
# on affiche un message d'erreur et le script se termine
echo "Vous devez etre super-utilisateur pour executer ce script."
exit
else
fct_debut
fi
Dernière modification par wido (Le 03/08/2008, à 13:15)
Hors ligne