2017-03-10 2 views
0

Dies sollte eine einfache Antwort sein, aber ich konnte keine einfache Lösung finden. Ich versuche, ein Bash-Skript zu erstellen, das den Reindent.py-Tool-Scrip ausführt, aber ich möchte Benutzereingabe erhalten, ob er die Datei zurück auf Datenträger schreiben möchte. Grundsätzlich möchte ich reindent_python -n FILE_PATH oder reindent_python FILE_PATH eingeben. Bisher habe ich folgendes:Wie erhalten und vergleichen Sie Bash Function Parameter?

function reindent_python() { 
    if ["$1" = "n"]; then 
     ./reindent.py -n $2 
    else 
     ./reindent.py $2 
    fi 
} 

Da dies meine erste Shell-Skript ist ich bin nicht sicher, wie man, ob der erste Parameter -n und ist $1 die Parameter n und $2 die FILE_PATH? Wie würde ich dieses Skript erstellen?

Vielen Dank!

+1

genau das gleiche wie './reindent.py "$ @"', die die Positionsparameter –

+0

@DiegoTorresMilano Es dehnt sich aus, ich habe deine Antwort nicht verstanden, würde es dir etwas ausmachen, es zu erklären? –

+1

http://shellcheck.net/ würde dies für Sie erfassen. –

Antwort

2

Zunächst einmal, was Sie anzeigen, ist eine Funktion, kein Skript. Ihre Funktion könnte so einfach sein wie:

function reindent_python() { 
    ./reindent.py "[email protected]" 
} 

angesichts der Tatsache, dass Ihr Python-Skript erscheint die gleichen Argumente wie Ihre Funktion zu übernehmen. Sie können sie einfach mit dem obigen Konstrukt an das Python-Skript übergeben.

Wie @CharlesDuffy im Kommentar erwähnt, das function Stichwort ist nicht notwendig:

reindent_python() { 
    ./reindent.py "[email protected]" 
} 

Davon abgesehen, der if Teil

[ "$1" = "-n" ]; 

mit einem Raum um die Klammern und einen Bindestrich sein sollte vor der n.

+1

Ich würde vorschlagen, das Schlüsselwort 'function' zu entfernen - es macht die Funktion inkompatibel mit POSIX sh, während es ohne es völlig portabel wäre (und sich genau gleich verhält). –

+0

Danke, das hat funktioniert! –

1

Sie sind sehr nahe, fügen Sie einfach die -. Der String-Vergleich ist simpel und macht keine andere Verarbeitung, er entfernt den Bindestrich nicht für Sie.

function reindent_python() { 
    if [ "$1" = "-n" ]; then 
     ./reindent.py -n "$2" 
    else 
     ./reindent.py "$2" 
    fi 
} 

oder entfernen Sie beim Aufruf der Funktion:

reindent_python n FILE_PATH

+0

Vielen Dank für die Vorschläge @CharlesDuffy –

Verwandte Themen