Recuperer les attributs k,K,m,M,g,G
Résolu
HeXafluor
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
HeXafluor Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
HeXafluor Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un petit probleme sous Unix
Je suis actuellement en train de developper une appli qui sert a creer une partition sur un disque dut
le but est donc d'automatiser et que je puisse balancer la taille de la partoche dans les attributs de la fonction
Seulement, voila, je me vois mal rentrer la taille en octets (surtout si c'est de plusieurs GiB)
mon but est donc que quand je tape le nom de mon bash avec (par exemple) 1024K, que derrierer je puisse recuperer une variable qui fait 1024*1024
j'ai commencé a me pencher sur la question mais je m'arrache les cheveux:
ce que j'ai fait: (la taille est le 3eme argument de ma commande
if ( `echo "$3" | grep "K"`= "$3")
then
...
#j'ai pas encore trouvé comment enlever le dernier caractere mais bon un pb apres l'autre
et puis apres des elifs pour M et G (la ligne sera la meme a un caractere pres)
par exemple quand $3 vaut 1024K, quand je grep $3, il me renvoit 1024K puisque qu'il renvoit toute la ligne...
seulement non seulement je n'entre jamais dans la boucle mais en plus il me fait un e erreur de "token"
NEED HELP
J'ai un petit probleme sous Unix
Je suis actuellement en train de developper une appli qui sert a creer une partition sur un disque dut
le but est donc d'automatiser et que je puisse balancer la taille de la partoche dans les attributs de la fonction
Seulement, voila, je me vois mal rentrer la taille en octets (surtout si c'est de plusieurs GiB)
mon but est donc que quand je tape le nom de mon bash avec (par exemple) 1024K, que derrierer je puisse recuperer une variable qui fait 1024*1024
j'ai commencé a me pencher sur la question mais je m'arrache les cheveux:
ce que j'ai fait: (la taille est le 3eme argument de ma commande
if ( `echo "$3" | grep "K"`= "$3")
then
...
#j'ai pas encore trouvé comment enlever le dernier caractere mais bon un pb apres l'autre
et puis apres des elifs pour M et G (la ligne sera la meme a un caractere pres)
par exemple quand $3 vaut 1024K, quand je grep $3, il me renvoit 1024K puisque qu'il renvoit toute la ligne...
seulement non seulement je n'entre jamais dans la boucle mais en plus il me fait un e erreur de "token"
NEED HELP
A voir également:
- Recuperer les attributs k,K,m,M,g,G
- 1 million en k€ ✓ - Forum Audio
- 1000 k€ en euros - Forum Logiciels
- Comment récupérer les messages supprimés sur whatsapp - Guide
- G mail connexion - Guide
- Logitech g hub chargement infini ✓ - Forum Logiciels
4 réponses
Salut,
Attention : Pas d'espace entre les 2 crochets ouvrants de "[ [:digit:]]", dans l'exemple ci-dessous l'espace n'est là que pour palier à une interprétation interne des doubles crochets ;-(((
Attention : Pas d'espace entre les 2 crochets ouvrants de "[ [:digit:]]", dans l'exemple ci-dessous l'espace n'est là que pour palier à une interprétation interne des doubles crochets ;-(((
[tmpfs]$ cat foo.sh #! /bin/bash case "${3//[ [:digit:]]/}" in K|k) var=$(( ${3/[Kk]/}*1024 )) ;; M|m) var=$(( ${3/[Mm]/}*1024*1024 )) ;; G|g) var=$(( ${3/[Gg]/}*1024*1024*1024 )) ;; esac echo $var [tmpfs]$ ./foo.sh 1024 1024 1024K 1048576 [tmpfs]$ ./foo.sh 1024 1024 1024k 1048576 [tmpfs]$ ./foo.sh 1024 1024 1024g 1099511627776 [tmpfs]$;-))
heu ... chez moi ca ne marche pas...
j'ai un message d'erreur...
~ # sh ./finalbench.sh -HDD -EXT2 128K
Vous etes l'user root
Valid param numbers
80023749120
finalbench.sh: line 174: syntax error: Bad substitution
La ligne en question (174) est la ligne ou se trouve le case (le test d'entrée du switch).
Aussi quand je fait sortir la ligne de calcul de la boucle:
il me dis aussi une erreur de substitution...
Peut etre qu'il faut que je charge des modules supplementaires dans ma distribution (mais ca m'arrangerai pas)
J'avais lu un truc sur les sed (il y a quelques années de ca) et normalement, on peut faire ce genre de trucs en combinant un peu de sed et un peu de awk ...
Mais j'ai pas trouvé encore l'astuce...
Mais bon ... si ca marche chez toi, tu pourra pas facilement trouver d'ou vien le probleme...
j'ai un message d'erreur...
~ # sh ./finalbench.sh -HDD -EXT2 128K
Vous etes l'user root
Valid param numbers
80023749120
finalbench.sh: line 174: syntax error: Bad substitution
La ligne en question (174) est la ligne ou se trouve le case (le test d'entrée du switch).
Aussi quand je fait sortir la ligne de calcul de la boucle:
ASKED_SIZE=$(( ${3/[Kk]/}*1024 ))
il me dis aussi une erreur de substitution...
Peut etre qu'il faut que je charge des modules supplementaires dans ma distribution (mais ca m'arrangerai pas)
J'avais lu un truc sur les sed (il y a quelques années de ca) et normalement, on peut faire ce genre de trucs en combinant un peu de sed et un peu de awk ...
Mais j'ai pas trouvé encore l'astuce...
Mais bon ... si ca marche chez toi, tu pourra pas facilement trouver d'ou vien le probleme...
Le truc c'est que je travaille avec une distribution super light et toutes les fonctions ne sont pas presentes
j'avais pensé a recuperer la longeur de ma taille
et ensuite de faire des test sur le SIZE_SIZE ieme caractere...
mais pareil, je ne sais pas comment extraire un caractere a partir de sa place dans le string
j'avais pensé a recuperer la longeur de ma taille
SIZE_SIZE= length $3
et ensuite de faire des test sur le SIZE_SIZE ieme caractere...
mais pareil, je ne sais pas comment extraire un caractere a partir de sa place dans le string
Exécute les commandes en mode de débogage (set -xv)
Quelle version de bash ( bash --version) ?
As-tu essayé mon exemple seul ?
Quelle version de bash ( bash --version) ?
As-tu essayé mon exemple seul ?
j'ai essayé ton bout de code sur ma machine Ubuntu (machine virtuelle sur VMWARE) ca compile pas
Pas plus que sur mon embedded.
Merci tout de meme du temps que tu as pris pour faire ca.
J'ai fait une solution, qui marche mais qui est un peu bourin quand meme...
la voila
J'avais prevenu que c'etais bourin...
Pas plus que sur mon embedded.
Merci tout de meme du temps que tu as pris pour faire ca.
J'ai fait une solution, qui marche mais qui est un peu bourin quand meme...
la voila
### # INTERPRETATION DES ATRIBUTS K M ET G (et aussi k, m et g) ### ARG3=$3 SIZE=${#ARG3} case $SIZE in 2) LETTER=`echo $3 | awk -F "" '{ print $2 }'` NUMBER=`echo $3 | awk -F "" '{ print $1 }'`;; 3) LETTER=`echo $3 | awk -F "" '{ print $3 }'` NUMBER=`echo $3 | awk -F "" '{ print $1$2 }'`;; 4) LETTER=`echo $3 | awk -F "" '{ print $4 }'` NUMBER=`echo $3 | awk -F "" '{ print $1$2$3 }'`;; 5) LETTER=`echo $3 | awk -F "" '{ print $5 }'` NUMBER=`echo $3 | awk -F "" '{ print $1$2$3$4 }'`;; 6) LETTER=`echo $3 | awk -F "" '{ print $6 }'` NUMBER=`echo $3 | awk -F "" '{ print $1$2$3$4$5 }'`;; *) echo "Veuillez specifier la taille dans un format mieux adapte" esac case "$LETTER" in K|k) ASKED_SIZE=$((1024 * $NUMBER)) ;; M|m) ASKED_SIZE=$(($NUMBER * 1024 * 1024)) ;; G|g) ASKED_SIZE=$(($NUMBER * 1024 * 1024 * 1024)) ;; [0-9]) ASKED_SIZE=$(($ARG3)) ;; *) echo 'HOUSTON, ON A UN PROBLEME' echo "Je sais pas trop ce que c'est comme taille $LETTER ;)" exit; ;; esac
J'avais prevenu que c'etais bourin...