I vår senaste artikel gick vi över några lättanvända triks för att göra enkla men användbara skalskript. Nu dyker vi lite mer och lägger lite intelligens åt dem.

Använda Conditionals

Om du kommer ihåg det skript vi skrev förra gången körde det en serie kommandon som använde Pandoc för att generera fyra versioner av ett Markdown-dokument (i varje HTML, DOCX, ODT och ePub). Men det var allt eller inget ... antingen använde vi Pandoc själva för att göra dem en åt gången, annars alla. Vad händer om vi ville välja och välja?

Det här är enkelt med hjälp av Conditionals, som i grunden är " om X är detta, gör sedan det här " -förklaringarna. Låt oss ta en titt på manuset som vi hade 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 att vi vill kunna välja ett av ovanstående föremål på kommandoraden eller göra dem alla. En snabb ändring av pandoc-pub.sh- skriptet som det kommer att göra just det:

 #! / bin / bash file = $ 1 export = $ 2 om ["$ export" == "html"] då pandoc -r markdown -w html -o $ file.html $ file elif ["$ export" == "docx "] sedan pandoc -r markdown -w docx -o $ file.docx $ fil elif [" $ export "==" odt "] då pandoc -r markdown -w odt -o $ file.odt $ fil elif [" $ exportera "==" epub "] då pandoc -r markdown -w epub -o $ file.epub $ file fi 

Det första vi gjorde här är att ge de två variablerna vi vill ha från kommandoradsnamnen: fil (vilket är Markdown-källfilen) och exportera (vilket är det format vi vill exportera till. Så nu kan vi välja och välja vad vi vill generera genom att använda:

 pandoc-pub.sh [fil du vill konvertera] .md [en av antingen "html, " "docx, " "odt" eller "epub"] 

Men hur är det med hela shebang? Vi kan göra det förra gången, men inte nu? Tja, om vi tänker framåt lite, borde vi redogöra för ett fall där vi (eller en annan användare) går in på något förutom de fyra alternativen ovan - varför exportera inte allt i så fall? Lägg till ytterligare en bit kod enligt följande:

 #! / bin / bash file = $ 1 export = $ 2 om ["$ export" == "html"] då pandoc -r markdown -w html -o $ file.html $ file elif ["$ export" == "docx "] sedan pandoc -r markdown -w docx -o $ file.docx $ fil elif [" $ export "==" odt "] då pandoc -r markdown -w odt -o $ file.odt $ fil elif [" $ exportera "==" epub "] då pandoc -r markdown -w epub -o $ file.epub $ fil annars 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 

Om vi ​​inte skriver in något efter filnamnet på kommandoraden (eller fel sak) kommer det här skriptet bara att göra den säkra saken och generera alla format.

Lägga till en GUI

Men om du i det här fallet inte vill att det bara ska generera allt, men gör något mer användbart. Vi kunde lägga till en annan

 elif 

uttalande för att generera alla format när "alla" är angivna på kommandoraden och ändra satsen för att skriva ut lite hjälptext:

 #! / bin / bash file = $ 1 export = $ 2 om ["$ export" == "html"] då pandoc -r markdown -w html -o $ file.html $ file elif ["$ export" == "docx "] sedan pandoc -r markdown -w docx -o $ file.docx $ fil elif [" $ export "==" odt "] då pandoc -r markdown -w odt -o $ file.odt $ fil elif [" $ export "==" epub "] då pandoc -r markdown -w epub -o $ file.epub $ fil elif [" $ export "==" all "] då pandoc -r markdown -w html -o $ file.html $ fil && 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 $ fil annars echo "Vänligen lägg till ett av följande alternativ efter filnamnet: html, odt, docx, epub eller alla." fi 

Men det blir mer användbart att vi vid en blank eller felaktig flagga visar en GUI för att hjälpa användaren tillsammans. Först måste vi installera en uppsättning verktyg som heter Zenity för att hjälpa oss. Du kan installera det här från Software Center, eller använd följande kommando:

 sudo apt-get install zenity 

Därefter måste vi använda Zenity för att skapa en dialog för oss. Vi vill ha något där användaren kan välja alla eller några av de alternativ vi har tillgängliga ... kryssrutor låter som det rätta här. Så vi skapar en Zenity-dialog med kryssrutor som representerar alla våra alternativ:

 #! / bin / bash zenity --list - checklista --title = "Pandoc Publisher" - kolumn = "" --column = "Exportera format" FALSE "html" FALSE "odt" FALSE "docx" FALSE "epub " 

Du kan se hur ovanstående Zenity-kommando konstrueras genom att läsa manualen här. Därefter måste vi få listan över vad användaren kontrollerar och tilldela den till en variabel. Lägga till ett variabelnamn och lägga in kommandot Zenity i parentes och lägga till ett "$" -tecken kommer att berätta att skalet ersätter kommandot inne med resultatet när det är klart:

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

Nu har vi en variabel "$ val" som innehåller en lista (separerad av "|" som standard) för alla valda alternativ. Vi måste kontrollera om listan innehåller några av de format vi planerar att hantera med "= ~" istället för "==" (det här kontrollerar om något innehåller något annat, i det här fallet) ... för exempel:

 om [[$ choices = ~ "html"]] 

Slutligen kommer en snabb ändring av manuset att visa denna dialogruta när inget format tillhandahålls och kör sedan det lämpliga Pandoc-kommandot när det här alternativet är markerat i dialogrutan:

 #! / bin / bash file = $ 1 export = $ 2 om ["$ export" == "html"] då pandoc -r markdown -w html -o $ file.html $ file elif ["$ export" == "docx "] sedan pandoc -r markdown -w docx -o $ file.docx $ fil elif [" $ export "==" odt "] då pandoc -r markdown -w odt -o $ file.odt $ fil elif [" $ export "==" epub "] då pandoc -r markdown -w epub -o $ file.epub $ fil elif [" $ export "==" all "] då pandoc -r markdown -w html -o $ file.html $ fil && 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 $ fil annars val = $ (zenity --list --checklist --title = "Pandoc Publisher" - kolumn = "" --column = "Exportera format" FALSE "html" FALSE "odt" FALSE "docx" FALSE "epub" ); om [[$ choices = ~ "html"]] då pandoc -r markdown -w html -o $ file.html $ file; fi om [[$ choices = ~ "odt"]] då pandoc -r markdown -w docx -o $ file.docx $ file; fi om [[$ choices = ~ "docx"]] sedan pandoc -r markdown -w odt -o $ file.odt $ file; fi om [[$ choices = ~ "epub"]] då pandoc -r markdown -w epub -o $ file.epub $ file; fi fi 

Precis som det, en personlig applikation med GUI och kommandoradsalternativ.