Stations de travail en ligne OnWorks Linux et Windows

Logo

Hébergement gratuit en ligne pour les postes de travail

<Précédent | Table des matières | Suivant>

Une application plus complète

Après une longue pause, nous allons reprendre le travail sur notre sys_info_page programme. Notre prochain ajout ajoutera plusieurs options de ligne de commande au programme comme suit :

Fichier de sortie. Nous ajouterons une option pour spécifier un nom pour un fichier devant contenir la sortie du programme. Il sera spécifié soit -f filet or --déposer filet.

Mode interactif. Cette option demandera à l'utilisateur un nom de fichier de sortie et déterminera si le fichier spécifié existe déjà. Si tel est le cas, l'utilisateur sera invité avant que le fichier existant ne soit écrasé. Cette option sera spécifiée soit par -i or --interactif.

Aide. Non plus -h or --Aidez-moi peut être spécifié pour que le programme génère un message d'utilisation informatif.

Voici le code nécessaire pour implémenter le traitement en ligne de commande :



utilisation () {

echo "$NOMPROG : utilisation : $NOMPROG [-f fichier | -i]" return

}

# traiter les options de la ligne de commande interactive=

utilisation () {

echo "$NOMPROG : utilisation : $NOMPROG [-f fichier | -i]" return

}

# traiter les options de la ligne de commande interactive=


nom de fichier=


tandis que [[ -n $1 ]]; ne cas 1 $ dans

-f | --déposer)

décalage

nom de fichier=$1

;;

nom de fichier=


tandis que [[ -n $1 ]]; ne cas 1 $ dans

-f | --déposer)


-je | --interactive) interactive=1

;;

-h | --help) sortie d'utilisation

;;

*) utilisation >&2

sortie 1

;;

-je | --interactive) interactive=1

;;

-h | --help) sortie d'utilisation

;;

*) utilisation >&2

sortie 1

;;


Esac

décalage fait

Esac

décalage fait


image

Tout d'abord, nous ajoutons une fonction shell appelée usage pour afficher un message lorsque l'option d'aide est invoquée ou qu'une option inconnue est tentée.

Ensuite, nous commençons la boucle de traitement. Cette boucle continue tandis que le paramètre positionnel

$1 n'est pas vide. À la fin de la boucle, nous avons une commande shift pour faire avancer les paramètres de position pour s'assurer que la boucle finira par se terminer.

Dans la boucle, nous avons un maisons instruction qui examine le paramètre positionnel actuel pour voir s'il correspond à l'un des choix pris en charge. Si un paramètre pris en charge est trouvé, il est traité. Si un choix inconnu est trouvé, le message d'utilisation s'affiche et le script se termine par une erreur.

La -f paramètre est traité de manière intéressante. Lorsqu'il est détecté, il provoque un décalage se produire, ce qui fait avancer le paramètre de position $1 à l'argument de nom de fichier fourni au -f option.

Nous ajoutons ensuite le code pour implémenter le mode interactif :



# mode interactif


if [[ -n $interactif ]] ; alors tandis que vrai ; faire

read -p "Entrez le nom du fichier de sortie : " filename if [[ -e $filename ]] ; alors

read -p "'$filename' existe. Écraser? [y/n/q] > " case $REPLY in

Y|y) pause

# mode interactif


if [[ -n $interactif ]] ; alors tandis que vrai ; faire

read -p "Entrez le nom du fichier de sortie : " filename if [[ -e $filename ]] ; alors

read -p "'$filename' existe. Écraser? [y/n/q] > " case $REPLY in

Y|y) pause


;;

Q|q) echo "Programme terminé." sortir

;;

*) Continuez

;;

Esac

elif [[ -z $filename ]] ; puis continue

d'autre

pause

fi

fait

fi

;;

Q|q) echo "Programme terminé." sortir

;;

*) Continuez

;;

Esac

elif [[ -z $filename ]] ; puis continue

d'autre

pause

fi

fait

fi


Si la Interactif variable n'est pas vide, une boucle sans fin est démarrée, qui contient l'invite de nom de fichier et le code de gestion de fichier existant suivant. Si le fichier de sortie souhaité existe déjà, l'utilisateur est invité à l'écraser, à choisir un autre nom de fichier ou à quitter le programme. Si l'utilisateur choisit d'écraser un fichier existant, un pause est exécuté pour terminer la boucle. Remarquez comment le maisons L'instruction détecte uniquement si l'utilisateur choisit d'écraser ou de quitter. Tout autre choix entraîne la poursuite de la boucle et invite à nouveau l'utilisateur.

Afin d'implémenter la fonctionnalité de nom de fichier de sortie, nous devons d'abord convertir le code d'écriture de page existant en une fonction shell, pour des raisons qui deviendront claires dans un instant :



write_html_page () { chat <<- _EOF_

$ TITRE

$ TITRE

$TIMESTAMP

$(report_uptime)

$(espace_disque_rapport)

$(report_home_space)

_EOF_ retour

}


# page html de sortie


if [[ -n $filename ]] ; alors

write_html_page () { chat <<- _EOF_

$ TITRE

$ TITRE

$TIMESTAMP

$(report_uptime)

$(espace_disque_rapport)

$(report_home_space)

_EOF_ retour

}


# page html de sortie


if [[ -n $filename ]] ; alors


si vous touchez $filename && [[ -f $filename ]]; puis write_html_page > $filename

d'autre

echo "$PROGNAME : Impossible d'écrire le fichier '$filename'" >&2 exit 1

fi d'autre

écrire_html_page

fi

si vous touchez $filename && [[ -f $filename ]]; puis write_html_page > $filename

d'autre

echo "$PROGNAME : Impossible d'écrire le fichier '$filename'" >&2 exit 1

fi d'autre

écrire_html_page

fi


Le code qui gère la logique du -f apparaît à la fin de la liste ci-dessus. Dans celui-ci, nous testons l'existence d'un nom de fichier et, s'il en trouve un, un test est effectué pour voir si le fichier est bien accessible en écriture. Pour ce faire, un -nous est effectué, suivi d'un test pour déterminer si le fichier résultant est un fichier normal. Ces deux tests prennent en charge les situations où un nom de chemin invalide est entré (-nous échouera) et, si le fichier existe déjà, qu'il s'agit d'un fichier normal.

Comme nous pouvons le voir, le écrire_html_page La fonction est appelée pour effectuer la génération réelle de la page. Sa sortie est soit dirigée vers la sortie standard (si la variable nom de fichier est vide) ou redirigé vers le fichier spécifié.


Meilleur système d'exploitation Cloud Computing chez OnWorks :