Mehr über Shell Script: Hinzufügen von Bedingungen und GUI
In unserem letzten Artikel haben wir einige benutzerfreundliche Tricks besprochen, um einfache, aber nützliche Shell-Skripte zu erstellen. Jetzt tauchen wir etwas mehr ein und fügen ihnen etwas Intelligenz hinzu.
Konditionale verwenden
Wenn Sie sich an das Skript erinnern, das wir das letzte Mal geschrieben haben, hat es eine Reihe von Befehlen ausgeführt, die Pandoc verwendeten, um vier Versionen eines Markdown-Dokuments zu erzeugen (in jedem von HTML, DOCX, ODT und ePub). Aber das war alles oder nichts ... Entweder benutzten wir Pandoc selbst, um sie einzeln zu machen, oder sie alle. Was, wenn wir wählen wollten?
Dies ist einfach mit Conditionals, die im Wesentlichen " wenn X ist dies, dann tun dies " -Anweisungen. Werfen wir einen Blick auf das Skript, wie wir es hatten:
#! / bin / bash pandoc -r markdown -w html -o $ 1.html $ 1 && pandoc -r markdown -w docx -o $ 1.docx $ 1 && pandoc -r markdown -w odt -o $ 1.odt $ 1 && pandoc - r Abschrift -w epub -o $ 1.epub $ 1
Angenommen, wir möchten eines der oben genannten Elemente in der Befehlszeile auswählen oder alle von ihnen ausführen. Eine schnelle Änderung des pandoc-pub.sh- Skripts wird genau das bewirken :
#! / bin / bash file = $ 1 export = $ 2 wenn ["$ export" == "html"] dann pandoc -r markdown -w html -o $ datei.html $ datei elif ["$ export" == "docx "] dann pandoc -r markdown -w docx -o $ datei.docx $ datei elif [" $ export "==" odt "] dann pandoc -r markdown -w odt -o $ datei.odt $ datei elif [" $ export "==" epub "] dann pandoc -r markdown -w epub -o $ datei.epub $ datei fi
Das erste, was wir hier gemacht haben, ist, die zwei Variablen, die wir wollen, aus den Befehlszeilennamen zu geben: Datei (das ist die Markdown-Quelldatei) und Export (das ist das Format, in das wir exportieren wollen. Jetzt können wir auswählen und auswählen Was wir erzeugen wollen mit:
pandoc-pub.sh [zu konvertierende Datei] .md [entweder "html", "docx", "odt" oder "epub"]
Aber was ist mit dem ganzen Shebang? Wir könnten das letzte Mal machen, aber nicht jetzt? Nun, wenn wir ein wenig nachdenken, sollten wir einen Fall berücksichtigen, in dem wir (oder ein anderer Benutzer) etwas außer den vier oben genannten Optionen eingeben - in diesem Fall, warum nicht alles exportieren? Fügen Sie ein weiteres Bit Code wie folgt hinzu:
#! / bin / bash file = $ 1 export = $ 2 wenn ["$ export" == "html"] dann pandoc -r markdown -w html -o $ datei.html $ datei elif ["$ export" == "docx "] dann pandoc -r markdown -w docx -o $ datei.docx $ datei elif [" $ export "==" odt "] dann pandoc -r markdown -w odt -o $ datei.odt $ datei elif [" $ export "==" epub "] dann pandoc -r markdown -w epub -o $ datei.epub $ datei sonst pandoc -r markdown -w html -o $ datei.html $ datei && pandoc -r markdown -w docx -o $ file.docx $ datei && pandoc -r markdown -w odt -o $ datei.odt $ datei && pandoc -r markdown -w epub -o $ datei.epub $ datei fi
Wenn wir nun nach dem Dateinamen an der Befehlszeile (oder der falschen Sache) nichts eingeben, wird dieses Skript nur die sichere Sache machen und alle Formate generieren.
Eine GUI hinzufügen
Aber was ist, wenn Sie in diesem letzten Fall nicht wollen, dass alles nur erzeugt wird, sondern etwas hilfreicheres tut. Wir könnten noch eins hinzufügen
elif
Anweisung zum Generieren aller Formate, wenn "all" in der Befehlszeile eingegeben wird, und Ändern der Anweisung zum Drucken eines Hilfetextes:
#! / bin / bash file = $ 1 export = $ 2 wenn ["$ export" == "html"] dann pandoc -r markdown -w html -o $ datei.html $ datei elif ["$ export" == "docx "] dann pandoc -r markdown -w docx -o $ datei.docx $ datei elif [" $ export "==" odt "] dann pandoc -r markdown -w odt -o $ datei.odt $ datei elif [" $ export "==" epub "] dann pandoc -r markdown -w epub -o $ datei.epub $ datei elif [" $ export "==" alle "] dann pandoc -r markdown -w html -o $ datei.html $ file && pandoc -r markdown -w docx -o $ datei.docx $ datei && pandoc -r markdown -w odt -o $ datei.odt $ datei && pandoc -r markdown -w epub -o $ datei.epub $ datei else echo "Fügen Sie eine der folgenden Optionen nach dem Dateinamen hinzu: html, odt, docx, epub oder all." fi
Aber es wird nützlicher sein, dass wir im Falle eines leeren oder falschen Flags eine GUI anzeigen, die dem Benutzer hilft. Zuerst müssen wir eine Reihe von Tools namens Zenity installieren, um uns zu helfen. Sie können dies über das Software Center installieren oder den folgenden Befehl verwenden:
sudo apt-get installieren zenity
Als nächstes müssen wir Zenity verwenden, um einen Dialog für uns zu erstellen. Wir werden etwas wollen, wo der Benutzer alle oder einige der verfügbaren Optionen auswählen kann ... Checkboxen klingt hier wie das Richtige. Wir erstellen also einen Zenity-Dialog mit Kontrollkästchen, die alle unsere Optionen repräsentieren:
#! / bin / bash zenity --list --checklist --title = "Pandoc Publisher" --spalte = "" --column = "Format exportieren" FALSE "html" FALSE "odt" FALSCH "docx" FALSE "epub "
Sie können sehen, wie der obige Zenity-Befehl erstellt wird, indem Sie das Handbuch hier lesen. Als nächstes müssen wir die Liste dessen abrufen, was der Benutzer überprüft, und ihn einer Variablen zuweisen. Das Hinzufügen eines Variablennamens und das Umschließen des Zenity-Befehls in Klammern und das Hinzufügen eines "$" - Zeichens weist die Shell an, den Befehl drinnen durch das Ergebnis zu ersetzen, wenn sie fertig ist:
#! / bin / bash Auswahl = $ (zenity --list --checklist --title = "Pandoc Publisher" --spalte = "" --column = "Exportformat" FALSE "html" FALSE "odt" FALSE "docx "FALSCH" epub ");
Jetzt haben wir eine Variable "$ choices", die eine Liste (standardmäßig durch "|" getrennt) aller ausgewählten Optionen enthält. Wir müssen prüfen, ob diese Liste eines der Formate enthält, die wir verarbeiten wollen, indem wir "= ~" anstelle von "==" verwenden (dies prüft, ob etwas in diesem Fall etwas anderes enthält) ... für Beispiel:
wenn [[$ auswahlen = ~ "html"]]
Schließlich zeigt eine schnelle Änderung des Skripts diesen Dialog an, wenn kein Format angegeben wird, und führen dann den entsprechenden Pandoc-Befehl aus, wenn diese Option im Dialogfeld aktiviert ist:
#! / bin / bash file = $ 1 export = $ 2 wenn ["$ export" == "html"] dann pandoc -r markdown -w html -o $ datei.html $ datei elif ["$ export" == "docx "] dann pandoc -r markdown -w docx -o $ datei.docx $ datei elif [" $ export "==" odt "] dann pandoc -r markdown -w odt -o $ datei.odt $ datei elif [" $ export "==" epub "] dann pandoc -r markdown -w epub -o $ datei.epub $ datei elif [" $ export "==" alle "] dann pandoc -r markdown -w html -o $ datei.html $ file && pandoc -r markdown -w docx -o $ datei.docx $ datei && pandoc -r markdown -w odt -o $ datei.odt $ datei && pandoc -r markdown -w epub -o $ datei.epub $ datei else Auswahl = $ (zenity --list --checklist --title = "Pandoc Publisher" --spalte = "" --spalte = "Export Format" FALSCH "html" FALSCH "odt" FALSCH "docx" FALSCH "epub" ); if [[$ choices = ~ "html"]] dann pandoc -r markdown -w html -o $ datei.html $ datei; fi if [[$ choices = ~ "odt"]] dann pandoc -r markdown -w docx -o $ datei.docx $ datei; fi if [[$ auswahl = ~ "docx"]] dann pandoc -r markdown -w odt -o $ datei.odt $ datei; fi if [[$ auswahl = ~ "epub"]] dann pandoc -r markdown -w epub -o $ datei.epub $ datei; fi fi
Einfach so, eine personalisierte Anwendung mit GUI und Kommandozeilenoptionen.