Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/11/2017, à 21:50

AGP-Architecture

[RESOLU] script : ne pas afficher resultat d'une commande

Bonsoir à tous,

apprenant le bash, j'ai fais le petit script suivant :

 #! /bin/bash
 
    if [ $# -eq 0 ]; then
      exit 0;
    fi

    i=0
    declare -a MISSINGPAQUETS
    
    for param in $@
    do
        which $param # comment faire pour ne pas afficher le resultat de la commande
        if [ "$?" != "0" ]
        then
            MISSINGPAQUETS[$i]=$param
            i=$i+1;
            echo "fichier manquant : $param \n"
        fi
    done
    
    if [ $i != "0" ] 
    then
        echo "paquets manquants : ${#MISSINGPAQUETS[*]} \n"
        echo "Paquets : $MISSINGPAQUETS[@]" # ne fonctionne pas
    fi
    
    echo "terminé"

Et j'ai deux petits problème :

1. La commande which affiche l'emplacement dans la console alors que je souhaiterais ne pas l'afficher. Existe-t-il un paramètre pour ne pas afficher le resultat mais le mettre uniquement en memoire et pouvoir l'appeler par $?

2. Comme faut-il faire pour afficher tous les éléments d'un tableau sur une seule ligne?

Merci

Dernière modification par AGP-Architecture (Le 17/11/2017, à 22:35)

Hors ligne

#2 Le 16/11/2017, à 22:04

pingouinux

Re : [RESOLU] script : ne pas afficher resultat d'une commande

Bonsoir,
Essaye ceci :

.......................................
    for param in "$@"
    do
        if ! which "$param" >/dev/null
        then
            MISSINGPAQUETS[$((i++))]="$param"
            echo "fichier manquant : $param \n"
        fi
    done
    
    if [ $i != "0" ] 
    then
        echo "paquets manquants : ${#MISSINGPAQUETS[*]} \n"
        echo "Paquets : ${MISSINGPAQUETS[@]}"
    fi
.......................................

Hors ligne

#3 Le 16/11/2017, à 22:22

AGP-Architecture

Re : [RESOLU] script : ne pas afficher resultat d'une commande

merci pingouinux

Ca marche parfaitement mais j'ai quelques questions sur ton code:

1. Quelle différence y a-t-il entre : for param in "$@" et for param in $@ pourquoi mettre des "" pour une variable
2.

${#MISSINGPAQUETS[*]}

quant doit-on mettre de accolades
3. if ! which "$param" >/dev/null : comment se fait-il qu'il n'y a pas de  crochets  [ ]  pour la condition if ?
4. que signifie  >/dev/null

Programmant en C# et php, il me semble que bash est un peu "barbare" au niveau de l'écriture ou c'est juste un sentiment parce que je commence?

Hors ligne

#4 Le 17/11/2017, à 08:15

pingouinux

Re : [RESOLU] script : ne pas afficher resultat d'une commande

  1. La première forme traitera correctement les paramètres contenant des espaces

  2. Voir man bash, rubrique Parameter Expansion

  3. if commande est vrai si le code de retour de la commande est 0, faux sinon

  4. /dev/null est un fichier fictif (poubelle en sortie, vide en entrée)

Hors ligne