Script langstat.sh : demande de conseils et modifs
67jakol
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
Exileur Messages postés 1475 Date d'inscription Statut Membre Dernière intervention -
Exileur Messages postés 1475 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai fait un script pour une évaluation. Je souhaiterais savoir si vous pouviez y jeter un coup d'oeil et me dire ce qui pourrait être amélioré et comment?
Merci pour votre aide. Ca me permettrait de progresser...
jakol
j'ai fait un script pour une évaluation. Je souhaiterais savoir si vous pouviez y jeter un coup d'oeil et me dire ce qui pourrait être amélioré et comment?
Merci pour votre aide. Ca me permettrait de progresser...
jakol
#!/bin/bash # On teste l'existence du premier paramètre (le fichier) if [ ! $# -ge 1 ] || [ ! -e $1 ] then echo 'Fichier de dictionnaire introuvable' exit 1 fi # On fait un boucle sur les lettres. L'option -i de grep ignore la casse, et l'option -c donne le compte des lignes qui contiennent l'expression. Le tri s'effectue sur la sortie standard de la boucle. for lettre in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z do printf "%s - %s\n" $(grep -ic $lettre $1) $lettre done | sort -rn # On test l'existence d'un deuxième paramètre test if [ $# -ge 2 ] && [ $2 = 'test' ] then shift # on affiche le message dans la console echo " j'ai testé un deuxième paramètre " # on affiche le message dans le fichier test.txt echo " j'ai testé un deuxième paramètre" >> test.txt echo " Nombre de lignes dans test.txt : `wc -l test.txt` " fi # On demande si l'on veut supprimer le fichier test.text read -p "on supprime test.text ? oui/non : " reponse if [ $reponse = 'oui' ] then echo "on supprime le fichier test.txt" rm test.txt else echo "on garde le fichier test.txt" fi
Configuration: Windows / Chrome 75.0.3770.142
A voir également:
- Script langstat.sh : demande de conseils et modifs
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Script cmd - Guide
- Script download - Télécharger - Édition & Programmation
4 réponses
Salut,
for lettre in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
do
# on affiche le message dans la console
echo " j'ai testé un deuxième paramètre "
# on affiche le message dans le fichier test.txt
echo " j'ai testé un deuxième paramètre" >> test.txt
Mieux vaut prendre l'habitude d'entourer les variables d'accolades et de quotes doubles (
for lettre in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
do
for lettre in {A..Z} do…
# on affiche le message dans la console
echo " j'ai testé un deuxième paramètre "
# on affiche le message dans le fichier test.txt
echo " j'ai testé un deuxième paramètre" >> test.txt
echo " j'ai testé un deuxième paramètre " | tee -a test.txt
Mieux vaut prendre l'habitude d'entourer les variables d'accolades et de quotes doubles (
echo "${mavar}")
Merci pour ta réponse. Je ne connaissais pas la commande tee
Pour le code suivant comptant le nombre de lignes dans le fichiers test.txt
echo " Nombre de lignes dans test.txt : `wc -l test.txt` "
J'ai l'affichage suivant dans la console:
Le nombre de ligne dans test.txt : 3 test.txt
est-ce que c'est possible supprimer test.txt ? et Comment?
Merci pour ton aide
Pour le code suivant comptant le nombre de lignes dans le fichiers test.txt
echo " Nombre de lignes dans test.txt : `wc -l test.txt` "
J'ai l'affichage suivant dans la console:
Le nombre de ligne dans test.txt : 3 test.txt
est-ce que c'est possible supprimer test.txt ? et Comment?
Merci pour ton aide
Hello,
En matiére d'amélio, je te proposerai :
- je vérifie l'enssemble des mes paramétres d'entrée et je défini des variables nomées plutot qu'utiliser $1, $2 etc qui pourront vite devenir ilisible sur de gros scripts!
- Pour ce qui est du prompt utilisateur, soit c'est oui, soit on fait rien? Aussi, on utilisera plutot le case dans le cas présent.
- Il n'y a aucune fonction dans ton code ? Imaginons que tu souhaites passer plusieurs fichiers à ton script ? Tu vas copier coller le code autant de fois que de paramétre possible ?
- Bon je chipotte mais générallement, je sépare le traitement de l'affichage.
A plus :)
En matiére d'amélio, je te proposerai :
- je vérifie l'enssemble des mes paramétres d'entrée et je défini des variables nomées plutot qu'utiliser $1, $2 etc qui pourront vite devenir ilisible sur de gros scripts!
if [ $# -ge 2 ]
then
var1="${1}"
var2="${2}"
elif [ $# -ge 1 ]
var1="${1}"
else
echo 'Fichier de dictionnaire introuvable'
exit 1
fi
- Pour ce qui est du prompt utilisateur, soit c'est oui, soit on fait rien? Aussi, on utilisera plutot le case dans le cas présent.
while true; do
read -p "on supprime test.text ? oui/non : " reponse
case $reponse in
[Oo]* ) echo "on supprime le fichier test.txt" && rm test.txt; break;;
[Nn]* ) echo "on garde le fichier test.txt"; break;;
- ) echo "Vous devez répondre [Oo]ui ou [Nn]on";; esacdone
- Il n'y a aucune fonction dans ton code ? Imaginons que tu souhaites passer plusieurs fichiers à ton script ? Tu vas copier coller le code autant de fois que de paramétre possible ?
function_name () {
for lettre in {A..Z}
do
printf "%s - %s\n" $(grep -ic $lettre $1) $lettre
done
}
function_name "${var1}" | sort -rn
- Bon je chipotte mais générallement, je sépare le traitement de l'affichage.
function_name () {
declare -A ARRAY
for lettre in {A..Z}
do
ARRAY[$lettre]=`grep -ic $lettre "${var1}"`
done
}
function_name "${var1}"
for key in "${!ARRAY[@]}"; do
printf '%s = %s\n' "$key" "${ARRAY[$key]}"
done
A plus :)
Hello,
Je rajouterai que tu ne vérifies pas l'existance du fichier.
En l'occurence, tu vérifies que le premier paramétre est défini. Que celui ci n'est pas vide. Mais tu ne sais pas si le fichier existe..
Tu peux vérifier qu'un fichier avec :
Et juste pour le fun :
Je rajouterai que tu ne vérifies pas l'existance du fichier.
En l'occurence, tu vérifies que le premier paramétre est défini. Que celui ci n'est pas vide. Mais tu ne sais pas si le fichier existe..
Tu peux vérifier qu'un fichier avec :
if [[ -f "$var1" ]]; then echo "$var1 exist" fi
Et juste pour le fun :
$ cat test2 function usage() { echo "$1"; echo "langstat.sh <file> [test]"; exit 1; } [[ -f "$1" ]] && var1="$1" || usage 'file not exist'; echo "Traitement du fichier ..." $ bash test2 "aeazezea" file not exist langstat.sh <file> [test] $ bash test2 "/etc/hosts" Traitement du fichier ...
NON, les accolades ne sont pas indispensables si la variable n'est pas accolée à du texte :
sus aux accolades !!!