it-swarm.com.de

Übergeben Sie Befehlszeilenargumente an das Bash-Skript

Ich bin neu in der Bash-Skript-Programmierung.

Ich möchte ein Bash-Skript 'deploymLog' implementieren, das als Eingabe ein Zeichenfolgenargument (Name) akzeptiert.

[[email protected] Desktop]# ./deploymLog.sh name

hier möchte ich das String-Argument (Name) über die Kommandozeile übergeben

Als ersten Schritt muss ich den aktuellen Zeitstempel zusammen mit dieser Eingabezeichenfolge an eine Protokolldatei anhängen, z. B. Logone.txt im aktuellen Verzeichnis im folgenden Format:

[name]=[System time timestamp1]

Wie ist das möglich?

121
chinchu
$> 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

Das erste Argument über eine Befehlszeile kann mit dem Positionsparameter $1 Gefunden werden. [[ -n "$name" ]] Testet, ob $name Nicht leer ist. date +%s Gibt den aktuellen Zeitstempel in Unix-Zeit zurück. Der Operator >> Wird zum Schreiben in eine Datei verwendet, indem an die vorhandenen Daten in der Datei angehängt wird.

$> ./deploymLog.sh tt

$> cat Logone.txt 
tt=1329810941

$> ./deploymLog.sh rr

$> cat Logone.txt 
tt=1329810941
rr=1329810953

Für einen besser lesbaren Zeitstempel können Sie mit date Argumenten spielen.

Auf Shell-Befehlszeilenargumente kann über $1 (Das erste), $n (Das n-te) oder $* (Alle Argumente) zugegriffen werden. Ihr Skript sollte also starten:

#!/bin/bash

if [ $# -ne 1 ]; then
    echo $0: usage: myscript name
    exit 1
fi

name=$1

Jetzt ist das Namensargument über das Skript als $name Zugreifbar.

Um den Zeitstempel zu erhalten, verwenden Sie den Befehl date(1) und geben Sie ihm einen Formatbezeichner, damit das gewünschte Format erzeugt wird:

now=$(date +%Y%m%d%H%M%S)

Jetzt enthält $now Das aktuelle Datum und die aktuelle Uhrzeit.

So können Sie Ihre Protokolldatei folgendermaßen erstellen:

logfile=/path/to/log/file/mylogfile.$now
echo "[$name]=[$now]" >> $logfile

Sie sollten Ihre Nachrichten besser mit einer Shell-Funktion protokollieren, da die Verwendung einfacher ist:

function logit
{
    now=$(date +%Y%m%d%H%M%S)
    echo "$now: $*" >> $logfile
}

Beachten Sie, dass Shell-Funktionen auf dieselbe Weise wie das Skript auf ihre eigenen Argumente zugreifen (über $1 Usw.)

Das erste Skript sieht also so aus:

#!/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

(Beachten Sie, dass die Protokolldatei nicht genau das von Ihnen angegebene Format hat. Sie hat ein besseres Format mit dem Zeitstempel am Anfang jeder Zeile.).

66
trojanfoe
#!/bin/bash

name=$1

echo "$(date '+%Y%m%d-%H:%M:%S') => " $name >> x.log

führen Sie "bash deploymLog.sh was auch immer" aus, und Sie haben x.log mit

20120220-23:53:50 =>  whatever
7
Dyno Fu