2016-05-09 9 views
-3

Also fing ich heute an, Scripting mit vim zu betrachten und ich bin einfach so sehr verloren und suchte in einigen Bereichen Hilfe.Wie grundlegende Befehlszeilenargumente in Bash zu verarbeiten?

Für mein erstes Projekt, ich möchte eine Datei als ein Befehlszeilenargument verarbeiten, und wenn eine Datei nicht enthalten ist, wenn der Benutzer dieses Skript ausführt, sollte eine Verwendungsnachricht angezeigt werden, gefolgt von dem Beenden des Programms.

Ich habe keine Ahnung wo ich anfangen soll, brauche ich und if ... then Aussage, oder was?

+0

Quälen Sie sich nicht, versuchen Sie, vim und bash als eine Übung zu lernen. Verwenden Sie einen einfachen Editor und sehen Sie die [** Bash Guides **] (http://www.tldp.org/guides.html) (Anfänger und Fortgeschrittene) für Anfänger. –

+0

Siehe [Überprüfen, ob das übergebene Argument eine Datei oder ein Verzeichnis in bash ist] (http://stackoverflow.com/a/4665080/2627975) und destilliere das bis auf die Prüfung, ob die Datei existiert. –

+0

Ohne irgendeinen Versuch, einen Code zu schreiben, fragen Sie im Grunde nach einem Code. Sie können auch nur nach einem Code fragen. Der Titel und Inhalt sollte "Bitte schreiben Sie einen Code zum Überprüfen, ob der übergebene Parameter eine Datei ist". Ich würde vorschlagen, einen Pseudo-Code Ihres Verständnisses zu veröffentlichen, dann werden wir mit 'bash'-ism helfen. – alvits

Antwort

1

Ich denke, Sie zu fragen, wie ein Bash-Skript zu schreiben, die eine Datei als Befehlszeilenargument erfordert und tritt mit einer Nutzungsmeldung, wenn es ein Problem mit, dass:

#!/bin/bash 

# check if user provided exactly one command-line argument: 
if [ $# -ne 1 ]; then 
    echo "Usage: `basename "$0"` file" 
    exit 1 
# now check if the provided argument corresponds to a real file 
elif [ ! -f "$1" ]; then 
    echo "Error: couldn't find $1." 
    exit 1 
fi 

# do things with the file... 
stat "$1" 
head "$1" 
tail "$1" 
grep 'xyz' "$1" 
+1

Danke das ist perfekt! – JimBob101

+0

du bist willkommen :) ps: ich habe gerade einen Tippfehler behoben; 'if [-e ...]' (existiert) -> 'if [! -e ...] '(existiert nicht). – webb

+1

Ein paar Dinge. Wäre das Testen von '$ #' nicht relevant?Wenn der Benutzer einen Verzeichnisnamen übergibt, können einige dieser Befehle fehlschlagen, so dass "-f" möglicherweise ein besserer Test ist. – cdarke

3

Speicher vim für später und versuchen, eine Sache zu einer Zeit zu lernen. Ein einfacher Texteditor heißt nano.

Nun, soweit als Argument für eine Datei überprüft, und eine Nutzungsmeldung anders zeigt, ist dies ein typisches Muster:

PROGNAME="$0" 

function show_usage() 
{ 
    echo "Usage: ${PROGNAME} <filename>" >&2 
    echo "..." >&2 

    exit 1 
} 

if [[ $# -lt 1 ]]; then 
    show_usage 
fi 

echo "Contents of ${1}:" 
cat "$1" 

ist dies Lassen brechen.

PROGNAME="$0" 

$0 ist der Name des Skripts, wie es auf der Kommandozeile aufgerufen wurde.

function show_usage() 
{ 
    echo "Usage: ${PROGNAME} <filename>" >&2 
    echo "..." >&2 

    exit 1 
} 

Dies ist die Funktion, die die Meldung "Verwendung" ausgibt und mit einem Fehlerstatuscode endet. 0 ist Erfolg, alles andere als 0 ist ein Fehler. Beachten Sie, dass wir unsere echo umleiten zu &2 - this druckt die Verwendungsnachricht auf Standardfehler statt Standardausgabe.

if [[ $# -lt 1 ]]; then 
    show_usage 
fi 

$# ist die Anzahl der Argumente, die an das Skript übergeben werden. Wenn diese Zahl kleiner als 1 ist, drucken Sie die Verwendungsnachricht und beenden Sie sie.

echo "Contents of ${1}:" 
cat "$1" 

$1 ist aus Dateinamen - das erste Argument des Skripts. Wir können jede Verarbeitung vornehmen, die wir hier machen wollen, wobei $1 der Dateiname ist. Hoffe das hilft!

Verwandte Themen