Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/06/2011, 06h49   #1
Membre du Club
 
Avatar de YuGiOhJCJ
 
Étudiant
Inscription : janvier 2005
Messages : 161
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2005
Messages : 161
Points : 51
Points : 51
Par défaut Bash : calculer le pourcentage

Bonjour,

je souhaite en utilisant l’interpréteur Bash (et avec seulement les commandes externes 'test' et 'seq' ainsi que les builtins) calculer le pourcentage.

Le pourcentage de quoi? Le pourcentage de l'accomplissement d'une opération constituée d'un certain nombre connu d'étapes.

Un exemple? Une opération à 3 étapes :
$ ./percentage.sh 3
0%
33%
66%

Pour une opération constituée de plus de 100 étapes , on va devoir afficher plusieurs fois le même pourcentage :
$ ./percentage.sh 200
0%
0%
1%
1%
2%
2%
...

Alors j'ai réalisé un script qui fait ça, mais moi je me complique toujours la vie quand je développe. Peut être que vous pouvez me trouver plus simple?

Merci d'avance ;-)

Code :
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
 
#!/bin/sh
nbr=${1}
step=$((100 / ${nbr}))
wait_cur=0
wait_max=0
if test ${step} -eq 0; then
	step=1
	substraction=$((${nbr} - 100))
	wait_max=$((${wait_max} + 1))
	while test ${substraction} -gt 100; do
		substraction=$((${substraction} - 100))
		wait_max=$((${wait_max} + 1))
	done
fi
percentage=0
for each in `seq 1 ${nbr}`; do
	echo "${percentage}%"
	if  test ${wait_cur} -lt ${wait_max}; then
		wait_cur=$((${wait_cur}+1))
	else
		percentage=$((${percentage} + ${step}))
		wait_cur=0
	fi
done
YuGiOhJCJ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/06/2011, 08h48   #2
Membre confirmé
 
Avatar de fransoo
 
frans
Inscription : novembre 2009
Messages : 197
Détails du profil
Informations personnelles :
Nom : frans

Informations forums :
Inscription : novembre 2009
Messages : 197
Points : 231
Points : 231
Le plus basique:
Code :
1
2
3
for ((i=0; i<=$1; i++)); do
    echo "$((i*100/$1))%"
done
Maintenant, je ne vois pas bien l'usage des wait_cur et wait_max.
Les script doit-il interagir avec un autre ?
fransoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 11h20   #3
Membre du Club
 
Avatar de YuGiOhJCJ
 
Étudiant
Inscription : janvier 2005
Messages : 161
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2005
Messages : 161
Points : 51
Points : 51
Non le script doit pas interagir avec un autre...

Les variables wait_cur et wait_max me permettent de savoir combien de fois je dois répéter l'affichage d'un même pourcentage. Par exemple avec ${1} = 200, wait_max est égal à 1. Ainsi, wait_cur vaut 0, puis 1 et enfin passe au pourcentage suivant.

Mais en voyant que ta technique en 3 lignes fonctionne... Je me dis que je suis encore parti dans un truc inutile. En tout cas je te remercie c'est beaucoup plus simple et ça fait la même chose on dirait
YuGiOhJCJ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h41.


 
 
 
 
Partenaires

Hébergement Web