Script langstat.sh : demande de conseils et modifs
Fermé
67jakol
Messages postés
3
Date d'inscription
mardi 25 juin 2019
Statut
Membre
Dernière intervention
24 juillet 2019
-
Modifié le 24 juil. 2019 à 10:45
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 - 29 juil. 2019 à 14:41
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 - 29 juil. 2019 à 14:41
A voir également:
- Script langstat.sh : demande de conseils et modifs
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Microsoft activation script - Accueil - Windows
- Script bat - Guide
- Executeur de script - Télécharger - Édition & Programmation
4 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
24 juil. 2019 à 14:13
24 juil. 2019 à 14:13
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}")
67jakol
Messages postés
3
Date d'inscription
mardi 25 juin 2019
Statut
Membre
Dernière intervention
24 juillet 2019
24 juil. 2019 à 15:11
24 juil. 2019 à 15:11
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
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
24 juil. 2019 à 15:13
24 juil. 2019 à 15:13
wc -l < test.txt;-)
67jakol
Messages postés
3
Date d'inscription
mardi 25 juin 2019
Statut
Membre
Dernière intervention
24 juillet 2019
24 juil. 2019 à 15:25
24 juil. 2019 à 15:25
Merci pour le flux de redirection < qui permet d'afficher sur la console le nombre de lignes contenu dans le fichier. :o)
Exileur
Messages postés
1475
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 décembre 2022
150
24 juil. 2019 à 16:57
24 juil. 2019 à 16:57
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 :)
lEprofSonDkon
Messages postés
211
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
8 octobre 2022
13
24 juil. 2019 à 20:56
24 juil. 2019 à 20:56
bof, une fonction/factorisation pour une boucle qui est ± une factorisation...
bof.
bof.
Exileur
Messages postés
1475
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 décembre 2022
150
25 juil. 2019 à 08:05
25 juil. 2019 à 08:05
Oui, aprés s'il doit parser 15 fichiers, il peut toujours boucler sur le nombre d'argument -1 et vérifier si le dernier paramétre vaut 'test'. M'enfin ...
lEprofSonDkon
Messages postés
211
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
8 octobre 2022
13
>
Exileur
Messages postés
1475
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 décembre 2022
25 juil. 2019 à 14:51
25 juil. 2019 à 14:51
ta réponse n'a aucun rapport avec ma remarque.
Exileur
Messages postés
1475
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 décembre 2022
150
29 juil. 2019 à 14:41
29 juil. 2019 à 14:41
Ok, amméliore le script en question pour pouvoir effectuer le méme travail de recherche de caractéres sur plusieurs fichiers, et fais moi ça sans dupliquer la 'factorisation' ou sans fonctions.
Tu m'expliqueras ce qu'on factorise ici, au passage.
Tu m'expliqueras ce qu'on factorise ici, au passage.
Exileur
Messages postés
1475
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 décembre 2022
150
25 juil. 2019 à 08:30
25 juil. 2019 à 08:30
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 ...
Modifié le 24 juil. 2019 à 20:54
NON, les accolades ne sont pas indispensables si la variable n'est pas accolée à du texte :
sus aux accolades !!!