I vår siste artikkel gikk vi over noen brukervennlige triks for å lage enkle, men nyttige shell-skript. Nå dykker vi inn litt mer og legger litt intelligens til dem.

Bruke Conditionals

Hvis du husker skriptet vi skrev sist, løp det en rekke kommandoer som brukte Pandoc til å generere fire versjoner av et Markdown-dokument (i hver av HTML, DOCX, ODT og ePub). Men dette var alt eller ingenting ... enten brukte vi Pandoc selv til å gjøre dem en om gangen, ellers alle dem. Hva om vi ønsket å velge og velge?

Dette er enkelt ved bruk av Conditionals, som egentlig er " hvis X er dette, så gjør dette " uttalelsene. La oss ta en titt på skriptet som vi hadde 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.epub $ 1 

Anta at vi vil kunne velge en av de ovennevnte elementene på kommandolinjen, eller gjøre dem alle. En rask modifikasjon av pandoc-pub.sh- skriptet som dette vil oppnå nettopp det:

 #! / bin / bash file = $ 1 eksport = $ 2 hvis ["$ export" == "html") så pandoc -r markdown -w html -o $ file.html $ file elif ["$ eksport" == "docx "] så pandoc -r markdown -w docx -o $ file.docx $ fil elif [" $ eksport "==" odt ") så pandoc -r markdown -w odt -o $ file.odt $ fil elif [" $ eksporter "==" epub "] så pandoc -r markdown -w epub -o $ file.epub $ file fi 

Det første vi gjorde her er å gi de to variablene vi vil ha fra kommandolinjens navn: fil (som er Markdown-kildefilen), og eksport (som er formatet vi vil eksportere til. Så nå kan vi velge og velge hva vi vil generere ved å bruke:

 pandoc-pub.sh [fil du vil konvertere] .md [en av enten "html, " "docx, " "odt" eller "epub"] 

Men hva med hele shebang? Vi kunne gjøre det forrige gang, men ikke nå? Vel, hvis vi tenker fremover litt, bør vi redegjøre for et tilfelle der vi (eller en annen bruker) kommer inn i noe annet enn de fire valgene ovenfor - hvorfor ikke eksportere alt i dette tilfellet? Legg til en ekstra bit kode som følger:

 #! / bin / bash file = $ 1 eksport = $ 2 hvis ["$ export" == "html") så pandoc -r markdown -w html -o $ file.html $ file elif ["$ eksport" == "docx "] så pandoc -r markdown -w docx -o $ file.docx $ fil elif [" $ eksport "==" odt ") så pandoc -r markdown -w odt -o $ file.odt $ fil elif [" $ eksporter "==" epub "] så 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 $ file && pandoc -r markdown -w epub -o $ file.epub $ file fi 

Nå, hvis vi ikke skriver inn noe etter filnavnet på kommandolinjen (eller feil ting), vil dette skriptet bare gjøre det trygge og generere alle formatene.

Legge til en GUI

Men hva om, i dette siste tilfellet, vil du ikke at det bare skal generere alt, men gjør noe mer nyttig. Vi kan legge til en annen

 elif 

setning for å generere alle formater når "alle" er angitt på kommandolinjen, og endre setningen for å skrive ut noen hjelpetekst:

 #! / bin / bash file = $ 1 eksport = $ 2 hvis ["$ export" == "html") så pandoc -r markdown -w html -o $ file.html $ file elif ["$ eksport" == "docx "] så pandoc -r markdown -w docx -o $ file.docx $ fil elif [" $ eksport "==" odt ") så pandoc -r markdown -w odt -o $ file.odt $ fil elif [" $ eksporter "==" epub "] så pandoc -r markdown -w epub -o $ file.epub $ fil elif [" $ eksport "==" alle "] deretter pandoc -r markdown -w html -o $ file.html $ fil && pandoc -r markdown -w docx -o $ file.docx $ fil && pandoc -r markdown -w odt -o $ file.odt $ fil && pandoc -r markdown -w epub -o $ file.epub $ fil annet ekko "Vennligst legg til ett av følgende alternativer etter filnavnet: html, odt, docx, epub eller alle." fi 

Men det vil være mer nyttig at vi i tilfelle et tomt eller feil flagg viser en GUI for å hjelpe brukeren sammen. Først må vi installere et sett med verktøy kalt Zenity for å hjelpe oss. Du kan installere dette fra Software Center, eller bruk følgende kommando:

 sudo apt-get install zenity 

Deretter må vi bruke Zenity til å lage en dialog for oss. Vi vil ha noe der brukeren kan velge alle eller noen av alternativene vi har tilgjengelig ... kryssboksene høres ut som det rette her. Så vi lager en Zenity-dialog med avmerkingsbokser som representerer alle våre alternativer:

 #! / bin / bash zenity --list --checklist --title = "Pandoc Publisher" - kolonne = "" --column = "Eksporter format" FALSE "html" FALSE "odt" FALSK "docx" FALSE "epub " 

Du kan se hvordan Zenity-kommandoen ovenfor er konstruert ved å lese håndboken her. Deretter må vi få listen over hva brukeren sjekker, og tilordne den til en variabel. Hvis du legger til et variabelt navn, og legger inn Zenity-kommandoen i parentes, og legger til et "$" -tegn, vil det bli sagt om skallet erstatte kommandoen inne med resultatet når det er gjort:

 #! / bin / bash valg = $ (zenity --list --checklist --title = "Pandoc Publisher" - kolonne = "" --column = "Eksporter format" FALSE "html" FALSE "odt" FALSE "docx "FALSK" epub "); 

Nå har vi en variabel "$ valg" som inneholder en liste (adskilt av «|» som standard) for alle de valgte alternativene. Vi må sjekke for å se om listen inneholder noen av formater som vi planlegger å håndtere ved å bruke "= ~" i stedet for "==" (dette kontrollerer om noe inneholder noe annet, i dette tilfellet) ... for eksempel:

 hvis [[$ valg = ~ "html"]] 

Til slutt vil en rask endring av skriptet vise denne dialogboksen når det ikke er noe format, og kjør deretter den aktuelle Pandoc-kommandoen når dette alternativet er merket i dialogboksen:

 #! / bin / bash file = $ 1 eksport = $ 2 hvis ["$ export" == "html") så pandoc -r markdown -w html -o $ file.html $ file elif ["$ eksport" == "docx "] så pandoc -r markdown -w docx -o $ file.docx $ fil elif [" $ eksport "==" odt ") så pandoc -r markdown -w odt -o $ file.odt $ fil elif [" $ eksporter "==" epub "] så pandoc -r markdown -w epub -o $ file.epub $ fil elif [" $ eksport "==" alle "] deretter pandoc -r markdown -w html -o $ file.html $ fil && pandoc -r markdown -w docx -o $ file.docx $ fil && pandoc -r markdown -w odt -o $ file.odt $ fil && pandoc -r markdown -w epub -o $ file.epub $ fil ellers valg = $ (zenity --list --checklist --title = "Pandoc Publisher" --column = "" --column = "Eksporter format" 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 

Akkurat som det, et personlig program med GUI og kommandolinjealternativer.