Si, si, l'instruction « elif » existe bien Bash (au moins pour bash 3.2) !
berok37 wrote:Quelqu'un saurait comment couper un chemin de repertoire ????
j'explique :
j'ai le chemin /media/donnees, qui est le repertoire de montage, et l'idée est de pouvoir renommer le repertoire de montage avec sed, mais actuellement le chemin complet est stocké dans une variable grace a :
TABLEAU=( $(mount | grep mapartition) )
partoche=${TABLEAU[2]}
et je ne peux pas modifier seulement media, ni meme donnees d'ailleurs.

si une solution ou plusieurs se propose ???????
J'avoue ne pas avoir bien compris...
je reprends mon expliquation :
actuellemnt j'arrive a stocker le chemin "/media/donnees" dans une variable, en allant la lire dans mon fstab grace a une fonction mount | grep.

Enfait, je voudrais pouvoir isoler dans une nouvelle variable "media" et dans une autre variable "donnees".

Maintenant j'arrive pas a trouver une solution pour ca......

Si quelqu'un a une idée................
Ok, tout compris...

si test="/media/donnees" :
- ${test%/*} vaudra /media (supprime dans la chaîne test la plus petite sous-chaîne verifiant l'expression rationnelle « /* » à partir de la fin de test) ;
- ${test##*/} vaudra donnees (supprime dans test la plus petite sous-chaîne verifiant l'expression rationnelle « */ » à partir du début de test).

ÉDIT : pour que ça passe, il vaut mieux que ton chemin ne se termine pas par un « / » : « /media/donnees », pas « /media/donnees/ ».
@ Pikachu_2014 :
Genial, pil poil ce que je voulais.....

Merci bien.
@++++++
bonjour, :hammer: produit

Quelqu'un aurait une idée pour cumuler des variables qui contiennent des mots ??????
exemple :
var1="nom1"
var2="nom2"

var_resultat=var1-et-var2 (cumulé litteralement)

D'avance merci
j'ai ecrit trop vite,

mon essai avait reussi je ne n'avais pas vu....................
nouveau souci,

j'essaie depuis une erreur de manier et remanier une fonction de remplacement "sed -i "s/$expression1/$expression2/g" $fichier_montage/fstab" qui refuse de fonctionner si les expressions comprennent un ou des "/".
de plus j'ai toujours la meme erreur :
sed: -e expression n°1, caractère 10: option inconnue pour `s'

a savoir que :
expression1="/media/donnees"
expression2="/mnt/donnees"

sauriez-vous si ca peut etre fait avec grep ou autre ?????
@fox Delta :
Merci pour le lien, j'ai trouvé mon bonheur...

Maintenant j'ai un nouveau souci, je voulais utiliser "TABLEAU=( $(fdisk -ls) )" et utiliser les "echo" qui vont bien pour recupérer les differentes partoches ainsi que les formats de celles-ci.
Mais les echos du tableau me renvoient des resultats inexploitables pour ce que je veux faire.

A savoir que ce que je voudrais, c'est simplement pouvoir stocker le resultat de "fdisk -ls" (ou sont indiquées les formats), mais là je m'en sort pas.

Si quelqu'un a une solution......
Tu peux renvoyer un echo du tableau ?
J'aurais bien une solution... Mais elle est en perl :hammer:

a savoir faire quelque chose du genre
system("/sbin/fdisk -ls > fdisk.txt"); # execution de la commande systeme et stockage de son contenu dans le fichier texte fdisk.txt
open(FICH,"fdisk.txt");
my @fdisk = <FICH>; # lecture des entrees du fichier, et stockage de son contenu dans une liste (tableau)
close(FICH);
opendir(FOLD,".");
unlink(fdisk.txt); # suppression du fichier text
closedir(FOLD);
Je pense qu'il faudrait executer ce script en tant que root avec les droits qui vont bien
Je suis desole pour ce qui est du bash, je ne suis pas assez bon, et je ne sais pas trop comment faire... Il va falloir attendre Pikachu :-D
awk est fait pour toi...

Un exemple :
# fdisk -l
Disk /dev/sda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14        7296    58500697+  8e  Linux LVM

Disk /dev/sdb: 320.0 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       38913   312568641    b  W95 FAT32
# fdisk -ls | awk '/^\/dev\// {print $1}'
/dev/sda1
/dev/sda2
/dev/sdb1
# fdisk -ls | awk '/^\/dev\// {print $7}'
Linux
LVM
FAT32
Je te laisse envisager les possibilités offertes par awk.

More details here : http://nyal.developpez.com/tutoriel/gawk/index.php
Merci a vous pour les reponses rapides, cependant, du fait que mon script est en bash et comme je l'ai dit avant je voudrais le finir en bash avant d'envisager la programmation en perl, ceci etant la solution de Fox Delta fonctionne tres bien aussi, merci.

Cependant, j'ai deux questions concernant le retour du fdisk -ls sur mon poste :
- on ne distingue pas une partition ext2 d'une ext3, sauriez vous pourquoi ?
(je n'ai pas de ext2 sur mon poste, la question est juste au cas ou j'en aurait une jour, toutes les partoches linux ont le format linux sans distingo, c'est normal ????)
- pour mon usb, le retour des commandes "fdisk -ls | awk '/^\/dev\// {print $7}'" est decalé et il faut que je fasse "fdisk -ls | awk '/^\/dev\// {print $8}'" pour savoir que c'est du fat32, et ca m'ennuis car je ne trouve pas de regle logique pour savoir le format en fonction de la partition choisie, vous auriez une solution ou expliquation ??
(je cache pas que ma lé usb sert aussi bien pour windows que pour linux et elle semble avoir une format batard car grosoft me la reconnait mais n'est pas en mesure de l'affecter comme disque amovible, meme si ca fonctionne bien tout de meme).

voici le resultat de mon fdisk -ls :
[root@portFB2 fberard]# fdisk -ls

Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 2550 20482843+ 7 HPFS/NTFS
/dev/sda2 2551 14593 96735397+ f W95 Ext'd (LBA)
/dev/sda5 2551 6375 30724281 7 HPFS/NTFS
/dev/sda6 6376 10200 30724281 83 Linux
/dev/sda7 10201 12113 15366141 83 Linux
/dev/sda8 12114 14070 15719571 83 Linux
/dev/sda9 14071 14593 4200966 82 Linux swap / Solaris

Disk /dev/sdb: 1026 MB, 1026555392 bytes
129 heads, 16 sectors/track, 971 cylinders
Units = cylinders of 2064 * 512 = 1056768 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 * 1 972 1002487+ b W95 FAT32
Partition 1 has different physical/logical endings:
phys=(977, 128, 16) logical=(971, 52, 15)
d'ailleurs en ce qui concerne la solution de pikachu_2014 avec awk, comment fait-on pour affecter le resultat dans une variable sans imprimer le resultat a l'ecran ????
je reviens sur la solution de awk proposé par Pikachu_2014, et serait-il possible de n'avoir que le system que pour une partoche designée ??????
exemple :
si je veux monter la partoche "/dev/sda3" alors awk me renvoit seulement le system de sda3, plutot que tous les systems de toutes les partoches
Egalement dans mon script, je voudrais pouvoir faire des sauts, conditionnés ou pas, dans le script, et egalement pouvoir appeler une serie de lignes de commandes a un moment donné, a savoir que ces lignes sont situées plus bas ou plus haut dans le script, est-ce possible, si oui comment ?????????
@fox Delta :
j'ai voulu me remettre sur ta solution et ce matin la console me renvoit une erreur et dès la première ligne, erreur de syntaxe, pourrais-tu m'aider a la debugger :

a savoir que j'ai fait : [root@portFB2 fberard]# system("/sbin/fdisk -ls > fdisk.txt")
et que le retour est : bash: syntax error near unexpected token `"/sbin/fdisk -ls > fdisk.txt"'

qu'ai-je fait comme erreur ??????
Attention, ce sont des fonctions Perl ! D'où l'erreur...
Pour le décalage, il va falloir jouer dans awk avec le FS (la chaîne qui définit les spérations entre les colonnes du texte, par défaut une espace ou une tabulation, je crois)... Je regarderai ça, si tu ne trouve pas ou si personne n'a de meilleure alternative.
@Pikachu_2014 : :hammer: produit

Y a pas je trouve pas de solution et les modifs que j'ai faits dans la commande me renvoient des erreurs, surement parce que je connais pas l'ecriture propre de la commande.

Si tu peux m'aider........
A l'aide encore :

je suis en train de continuer mon script et je bute sur un pb.

voici le script :
#!/bin/bash
#clear

################## Variable pour test ##################
donnees=/media/donnees/SVG_LINUX

################## DEPART SCRIPT ##################
TABLEAU=( $(dir $donnees) ) #Stocke les repertoires disponibles du repertoire scruté
i=0 #init boucle while
limite=${#TABLEAU[@]} #limite de boucle
#pour voir ce qu'il y a dans le repertoie
while [ $i -lt $limite ]
do
echo ${TABLEAU[$i]} #affiche le contenu incrémenté du tableau
i=$[$i+1]
done
i=0 #init boucle while
#pour memoriser par variable chaque contenu
while [ $i -lt $limite ]
do
memo[$i]=$[${TABLEAU[$i]}]
i=$[$i+1]
done
read
#la suite, juste pour verifier si ca marche
i=1
echo $memo$i
i=2
echo $memo$i
i=3
echo $memo$i
i=4
echo $memo[$i]
i=5
echo $memo[$i]
i=6
echo $memo[$i]
i=7
echo $memo[$i]
i=8
echo $memo[$i]
i=9
echo $memo[$i]
i=10
echo $memo[$i]
i=11
echo $memo[$i]
i=12
echo $memo[$i].
Asavoir que ce que je voudrais, c'est scruter un repertoire (ca fonctionne), et memoriser dans une variable incrementée la sortie e chacune des lignes de la fonction TABLEAU.
J'ai essayé différentes ecritures et rien n'y fait, quand je fais un echo de chacune des variables, je n'ai que le retour de l'increment.
a croire que je peux pas enregistrer dans une variable en meme temps que je fais un while................

Si quelqu'un voit ou je deconnes...................
De retour de week-end... + decalage horaire = desole pour le retard dans la reponse.

Pour ce qui est de l'erreur de syntaxe, Pikachu y a repondu avant moi: il s'agit de perl.
Il faut donc en faire une script auquel tu donnes l'extension .pl
Assure-toi d'avoir mis ces lignes au debut de ton script:
#!/usr/bin/perl -w
use strict;
Pour ce qui est de ton script, je ne sais pas. Tu peux jeter un oeil sur cette page (mais reprend-le apres :hammer:). Il y a une courte partie sur les calculs arithmetiques. Le probleme, c'est pour ce que j'ai pu en lire, tu as fait ce qu'il faut...

Pour ce qui est de awk, je te renvoie a cette page, sur Lea Linux.