Je suis nouveau dans la programmation de scripts bash.
Je veux implémenter un script bash 'deploymLog', qui accepte en entrée un argument de chaîne (nom).
[root@localhost Desktop]# ./deploymLog.sh name
ici, je veux passer l'argument chaîne (nom) via la ligne de commande
Dans un premier temps, je dois ajouter l'horodatage actuel avec cette chaîne d'entrée à un fichier journal indiquant Logone.txt
dans le répertoire courant au format ci-dessous:
[name]=[System time timestamp1]
Comment c'est possible?
$> cat ./deploymLog.sh
#!/bin/bash
name=$1
log_file="Logone.txt"
if [[ -n "$name" ]]; then
echo "$1=$( date +%s )" >> ${log_file}
else
echo "argument error"
fi
Le premier argument d'une ligne de commande peut être trouvé avec le paramètre positionnel $1
. [[ -n "$name" ]]
teste pour voir si $name
n'est pas vide. date +%s
renvoie l'horodatage actuel en temps Unix. Le >>
L'opérateur est utilisé pour écrire dans un fichier en ajoutant aux données existantes dans le fichier.
$> ./deploymLog.sh tt
$> cat Logone.txt
tt=1329810941
$> ./deploymLog.sh rr
$> cat Logone.txt
tt=1329810941
rr=1329810953
Pour un horodatage plus lisible, vous pouvez jouer avec les arguments date
.
Les arguments de la ligne de commande du shell sont accessibles via $1
(Le premier), $n
(Le nième) ou $*
(Tous les arguments), donc votre script doit démarrer:
#!/bin/bash
if [ $# -ne 1 ]; then
echo $0: usage: myscript name
exit 1
fi
name=$1
L'argument nom est désormais accessible depuis le script sous la forme $name
.
Pour obtenir l'horodatage, utilisez la commande date(1)
et donnez-lui un spécificateur de format afin qu'il produise le format souhaité:
now=$(date +%Y%m%d%H%M%S)
Maintenant $now
Contient la date et l'heure actuelles.
Vous pouvez ainsi créer votre fichier journal ainsi:
logfile=/path/to/log/file/mylogfile.$now
echo "[$name]=[$now]" >> $logfile
Il vaut mieux utiliser une fonction Shell pour enregistrer vos messages car il sera plus facile à utiliser:
function logit
{
now=$(date +%Y%m%d%H%M%S)
echo "$now: $*" >> $logfile
}
Notez que les fonctions Shell accèdent à leurs propres arguments de la même manière que le script (via $1
Etc.)
Ainsi, le script initial ressemble à ceci:
#!/bin/bash
function logit
{
now=$(date +%Y%m%d%H%M%S)
echo "$now: $*" >> $logfile
}
if [ $# -ne 1 ]; then
echo $0: usage: myscript name
exit 1
fi
name=$1
now=$(date +%Y%m%d%H%M%S)
logfile=/path/to/log/file/mylogfile.$now
logit name = $name
(notez que le fichier journal n'est pas au format exact que vous avez spécifié; il est meilleur avec l'horodatage au début de chaque ligne).
#!/bin/bash
name=$1
echo "$(date '+%Y%m%d-%H:%M:%S') => " $name >> x.log
exécutez "bash deploymLog.sh que ce soit", et vous obtenez x.log avec
20120220-23:53:50 => whatever