Mere om Shell Script: Tilføjelse af betingelser og GUI
I vores sidste artikel gik vi over nogle brugervenlige tricks til at lave enkle men nyttige shell-scripts. Nu vil vi dykke lidt mere og tilføje nogle intelligens til dem.
Brug af Conditionals
Hvis du husker det script, vi skrev sidste gang, kørte det en række kommandoer, der brugte Pandoc til at generere fire versioner af et Markdown-dokument (i hver af HTML, DOCX, ODT og ePub). Men det var alt eller ingenting ... enten brugte vi Pandoc selv til at lave dem en ad gangen, ellers alle dem. Hvad hvis vi ville vælge og vælge?
Dette er simpelt at bruge Conditionals, som i grunden er " hvis X er dette, så gør dette " udsagn. Lad os tage et kig på scriptet som vi havde det:
#! / 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 markdown -w epub -o $ 1.pub $ 1
Antag, at vi vil kunne vælge et af ovennævnte emner på kommandolinjen, eller gøre dem alle. En hurtig ændring af pandoc-pub.sh scriptet som sådan vil udrette netop det:
#! / bin / bash file = $ 1 eksport = $ 2 hvis ["$ export" == "html"] derefter pandoc -r markdown -w html -o $ file.html $ fil elif ["$ eksport" == "docx "] derefter pandoc -r markdown -w docx -o $ file.docx $ fil elif [" $ eksport "==" odt ") derefter pandoc -r markdown -w odt -o $ file.odt $ fil elif [" $ eksport "==" epub "] derefter pandoc -r markdown -w epub -o $ file.epub $ file fi
Det første, vi gjorde her, er at give de to variabler, vi ønsker fra kommandolinjenavne: fil (som er Markdown-kildefilen) og eksport (hvilket er det format, vi vil eksportere til. Så nu kan vi vælge og vælge hvad vi vil generere ved at bruge:
pandoc-pub.sh [fil du vil konvertere] .md [en af enten "html", "docx", "odt" eller "epub")
Men hvad med hele shebang? Vi kunne gøre det sidste gang, men ikke nu? Tja, hvis vi tænker fremad lidt, skal vi redegøre for en sag, hvor vi (eller en anden bruger) kommer ind for noget ud over de fire valgmuligheder ovenfor - i så fald hvorfor ikke eksportere alt? Tilføj en yderligere kodekode som følger:
#! / bin / bash file = $ 1 eksport = $ 2 hvis ["$ export" == "html"] derefter pandoc -r markdown -w html -o $ file.html $ fil elif ["$ eksport" == "docx "] derefter pandoc -r markdown -w docx -o $ file.docx $ fil elif [" $ eksport "==" odt ") derefter pandoc -r markdown -w odt -o $ file.odt $ fil elif [" $ eksport "==" epub "] derefter pandoc -r markdown -w epub -o $ file.epub $ fil ellers pandoc -r markdown -w html -o $ file.html $ file && pandoc -r markdown -w docx -o $ file.docx $ file && pandoc -r markdown -w odt -o $ file.odt $ fil && pandoc -r markdown -w epub -o $ file.epub $ file fi
Nu, hvis vi ikke indtaster noget efter filnavnet på kommandolinjen (eller den forkerte ting), vil dette script bare gøre det sikre og generere alle formaterne.
Tilføjelse af en GUI
Men hvad nu, hvis du i dette sidste tilfælde ikke vil have det til bare at generere alt, men gør noget mere nyttigt. Vi kunne tilføje en anden
Elif
erklæring for at generere alle formater, når "alle" er indtastet på kommandolinjen, og ændre sætningen for at udskrive nogle hjælpetekster:
#! / bin / bash file = $ 1 eksport = $ 2 hvis ["$ export" == "html"] derefter pandoc -r markdown -w html -o $ file.html $ fil elif ["$ eksport" == "docx "] derefter pandoc -r markdown -w docx -o $ file.docx $ fil elif [" $ eksport "==" odt ") derefter pandoc -r markdown -w odt -o $ file.odt $ fil elif [" $ eksport "==" epub "] derefter pandoc -r markdown -w epub -o $ file.epub $ fil elif [" $ eksport "==" alle "] derefter pandoc -r markdown -w html -o $ file.html $ file && pandoc -r markdown -w docx -o $ file.docx $ fil && pandoc -r markdown -w odt -o $ file.odt $ file && pandoc -r markdown -w epub -o $ file.epub $ fil Ellers ekko "Tilføj venligst en af følgende muligheder efter filnavnet: html, odt, docx, epub eller alle." fi
Men det vil være mere nyttigt, at vi i tilfælde af et tomt eller forkert flag viser en GUI for at hjælpe brugeren sammen. Først skal vi installere et sæt værktøjer kaldet Zenity for at hjælpe os. Du kan installere dette fra Software Center eller bruge følgende kommando:
sudo apt-get install zenity
Dernæst skal vi bruge Zenity til at oprette en dialog for os. Vi vil have noget, hvor brugeren kan vælge alle eller nogle af de muligheder, vi har til rådighed ... afkrydsningsfelter lyder som det rigtige her. Så vi opretter en Zenity-dialog med afkrydsningsfelter, der repræsenterer alle vores muligheder:
#! / bin / bash zenity --list --checklist --title = "Pandoc Publisher" - kolonne = "" --column = "Eksporter format" FALSE "html" FALSE "odt" FALSE "docx" FALSE "epub "
Du kan se, hvordan den ovennævnte Zenity-kommando er konstrueret ved at læse manualen her. Dernæst skal vi få listen over uanset brugerkontrol og tildele det til en variabel. Tilføjelse af et variabelt navn og indpakning af kommandoen Zenity i parentes, og tilføjelse af et "$" tegn vil fortælle shellet at erstatte kommandoen inde med resultatet, når det er færdigt:
#! / bin / bash valg = $ (zenity --list --checklist --title = "Pandoc Publisher" - kolonne = "" --column = "Eksporter format" FALSE "html" FALSE "odt" FALSE "docx "FALSE" epub ");
Nu har vi en variabel "$ valg", der indeholder en liste (adskilt af "|" som standard) for alle de valgte valg. Vi skal kontrollere, om denne liste indeholder nogle af de formater, vi planlægger at håndtere ved hjælp af "= ~" i stedet for "==" (dette kontrollerer for at se, om noget indeholder noget andet, i dette tilfælde) ... for eksempel:
hvis [[$ valg = ~ "html"]]
Endelig vil en hurtig ændring af scriptet vise denne dialog, når der ikke er angivet noget format, og kør derefter den relevante Pandoc-kommando, når denne valgmulighed er markeret i dialogboksen:
#! / bin / bash file = $ 1 eksport = $ 2 hvis ["$ export" == "html"] derefter pandoc -r markdown -w html -o $ file.html $ fil elif ["$ eksport" == "docx "] derefter pandoc -r markdown -w docx -o $ file.docx $ fil elif [" $ eksport "==" odt ") derefter pandoc -r markdown -w odt -o $ file.odt $ fil elif [" $ eksport "==" epub "] derefter pandoc -r markdown -w epub -o $ file.epub $ fil elif [" $ eksport "==" alle "] derefter pandoc -r markdown -w html -o $ file.html $ file && pandoc -r markdown -w docx -o $ file.docx $ fil && pandoc -r markdown -w odt -o $ file.odt $ file && pandoc -r markdown -w epub -o $ file.epub $ fil ellers valg = $ (zenity --list --checklist --title = "Pandoc Publisher" --column = "" --column = "Eksportformat" FALSE "html" FALSE "odt" FALSK "docx" FALSE "epub" ); hvis [[$ valg = ~ "html"]] så pandoc -r markdown -w html -o $ file.html $ file; fi hvis [[$ valg = ~ "odt"]] så pandoc -r markdown -w docx -o $ file.docx $ file; fi hvis [[$ valg = ~ "docx"]] så pandoc -r markdown -w odt -o $ file.odt $ file; fi hvis [[$ valg = ~ "epub"]] så pandoc -r markdown -w epub -o $ file.epub $ file; fi fi
Ligesom det, en personlig applikation med GUI og kommandolinje muligheder.