IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Shell - premier script : besoin de conseils


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Shell - premier script : besoin de conseils
    Bonjour,

    Utilisateur novice du terminal, je connais assez peu les commandes shell, et je n'ai encore jamais écrit de script.

    Face un premier besoin ce week-end, j'ai décidé de m'y mettre, mais j'ai du mal à comprendre la logique. Je suis familier des langages de programmation traditionnels (java, c++, php...), et ici, ça me semble un peu différent.

    Le but du script est de lister les partitions du système, et de faciliter leur ajout dans fstab.

    Il y a beaucoup de choses à améliorer ici, donc je vous remercie d'être indulgent.

    Voici l'état actuel du script, en bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    #!/bin/bash
    echo "------------------------------------------"
     
    for line in `blkid` ; do
    	if [[ ${line:0:1} == / ]] 
    	then
    		# line begin with a slash
    		partition=${line:0:${#line}-1}
    		# unset other variables
    		uuid=
    		label=
    		type=
    		secType=
    	fi
    	if [[ ${line:0:4} == UUID ]] 
    	then
    		# line begin with 'UUID'
    		uuid=${line:6:${#line}-7}
    #		echo UUID : $uuid
     
    	fi
    	if [[ ${line:0:5} == LABEL ]] 
    	then
    		# line begin with 'LABEL'
    		label=${line:7:${#line}-8}
    #		echo Label: $label
    	fi
    	if [[ ${line:0:4} == TYPE ]] 
    	then
    		# line begin with 'TYPE'
    		type=${line:6:${#line}-7}
    		#	echo Type : $type
    	fi
    	if [[ ${line:0:8} == SEC_TYPE ]] 
    	then
    		# line begin with 'SEC_TYPE'
    		secType=${line:14:${#line}-15}
    #		echo 'Second type : $secType'
    	fi
    	if  [[ $type == ext3 ]] 
    	then
    		# type seems to be the last parameter of the line
    		# echo Partition : $partition - $label \($type\)
    		echo ---Présent dans FSTAB : 
    		grep $uuid /etc/fstab
    		echo ---Ligne à ajouter dans FSTAB : 
    		echo UUID=$uuid /media/$label $type nouser,defaults,errors=remount-ro,atime,auto,rw,dev,exec,suid 0 1
    	fi
    done
    Ce qui donne sur la sortie qqchose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ------------------------------------------
    ---Présent dans FSTAB :
    UUID=cd3a4d4f-1c77-4936-b598-8e81698c2756 /               ext3    defaults,errors=remount-ro 0       1
    ---Ligne à ajouter dans FSTAB :
    UUID=cd3a4d4f-1c77-4936-b598-8e81698c2756 /media/ ext3 nouser,defaults,errors=remount-ro,atime,auto,rw,dev,exec,suid 0 1
    ---Présent dans FSTAB :
    UUID=848560df-7d1b-4544-9fe9-0e6519970ac6 /media/musique ext3 nouser,defaults,errors=remount-ro,atime,auto,rw,dev,exec,suid 0 1
    ---Ligne à ajouter dans FSTAB :
    UUID=848560df-7d1b-4544-9fe9-0e6519970ac6 /media/musique ext3 nouser,defaults,errors=remount-ro,atime,auto,rw,dev,exec,suid 0 1
    ---Présent dans FSTAB :
    UUID=4234560e-ba93-4c8d-b8de-30e68d4f64f1 /media/videos ext3 nouser,defaults,errors=remount-ro,atime,auto,rw,dev,exec,suid 0 1
    ---Ligne à ajouter dans FSTAB :
    UUID=4234560e-ba93-4c8d-b8de-30e68d4f64f1 /media/videos ext3 nouser,defaults,errors=remount-ro,atime,auto,rw,dev,exec,suid 0 1
    Il me parait clair qu'il va falloir externaliser les traitements redondants dans une fonction, mais pour le moment, je n'en suis pas là.

    J'aimerais récupérer la sortie de la commande grep afin de l'analyser. Par exemple, si elle retourne une ligne non commentée avec l'uuid de ma partition, je ne génère pas de sortie.

    Par ailleurs, il serait intéressant de stoquer toutes les infos dans un tableau multidimentionnel, afin de pouvoir d'abord proposer à l'user les partitions qu'il doit ajouter, puis de lui générer les lignes à ajouter (ou même l'ajouter automatiquement).

    De nombreuses améliorations sont possibles, comme l'ajout de la possibilité de modifier le label, la création des répertoires de montage. Aussi, dans un premier temps, je suis intéressé surtout par les conseils de programmation, et les explication concernant le fonctionnement de bash.

    Merci d'avance!

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Muscador Voir le message
    J'aimerais récupérer la sortie de la commande grep afin de l'analyser. Par exemple, si elle retourne une ligne non commentée avec l'uuid de ma partition, je ne génère pas de sortie.
    Pas de problème => ligne=`grep ...`

    Citation Envoyé par Muscador Voir le message
    Par ailleurs, il serait intéressant de stoquer toutes les infos dans un tableau multidimentionnel, afin de pouvoir d'abord proposer à l'user les partitions qu'il doit ajouter, puis de lui générer les lignes à ajouter (ou même l'ajouter automatiquement).
    Désolé, le shell est un langage assez bas niveau. Il peut "à la limite" gérer des tableaux à une dimension (et uniquement en bash ou shells plus évolués) mais pour gérer un tableau à n dim, faudra faire ça par le biais de tableaux en une dim (chaque élément gèrera un tableau à une dim)

    Citation Envoyé par Muscador Voir le message
    De nombreuses améliorations sont possibles, comme l'ajout de la possibilité de modifier le label, la création des répertoires de montage. Aussi, dans un premier temps, je suis intéressé surtout par les conseils de programmation, et les explication concernant le fonctionnement de bash.
    Cours et tutoriels Linux : http://linux.developpez.com/cours/
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [RegEx] Besoin de conseils pour script PHP/MySQL.
    Par ABandApart dans le forum Langage
    Réponses: 0
    Dernier message: 05/08/2010, 12h27
  2. Premier boulot, besoin de quelques conseils
    Par redcurve dans le forum Emploi
    Réponses: 10
    Dernier message: 14/07/2010, 18h09
  3. script greasemonkey, besoin de conseils
    Par Yuuuu dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/08/2009, 16h37
  4. [AJAX] Premier script, premier bug.. j'ai besoin de vous :)
    Par chromatia dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 23/06/2008, 14h40
  5. Besoin de conseil script d'administration
    Par szambaux dans le forum Administration système
    Réponses: 4
    Dernier message: 24/01/2008, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo