В последната ни статия разгледахме някои лесни за използване трикове, за да направим прости, но полезни скриптове на Shell. Сега ще се потопим в малко повече и ще добавим някаква интелигентност към тях.

Използване на условия

Ако си спомните скрипта, който написахме последния път, той изпълни серия от команди, които използваха Pandoc, за да генерират четири версии на документа на Markdown (във всеки от HTML, DOCX, ODT и ePub). Но това беше всичко или нищо ... или ние използвахме самия Пандок, за да ги направим един по един, или иначе всички. Какво ще стане, ако искаме да изберем?

Това е просто, като се използват условията, които основно са " ако X е това, а след това направете това " изявления. Нека да разгледаме сценария, както го имахме:

 ###################################################################################################################################################### # r markdown -w epub -o $ 1.epub $ 1 

Да предположим, че искаме да можем да избираме един от горните елементи в командния ред или да ги направим всички. Бърза промяна на pandoc-pub.sh скрипта като така ще постигне точно това:

 !! / bin / bash file = $ 1 експорт = $ 2 ако ["$ export" == "html"] тогава pandoc -r markdown -w html -o $ file.html $ file elif ["$ export" == "docx "] след това pandoc -r markdown -w docx -o $ file.docx $ файл elif [" $ export "==" odt "] тогава pandoc -r markdown -w odt -o $ file.odt $ file elif [" $ износ "==" epub "], след това pandoc -r markdown -w epub -o $ file.epub $ file fi 

Първото нещо, което направихме тук, е да дадем двете променливи, които искаме, от имената на командния ред: файла (който е източникът на Markdown) и износа (който е форматът, който искаме да експортираме.) Сега можем да изберем и изберем какво искаме да генерираме, като използваме:

 pandoc-pub.sh [файл, който искате да конвертирате] .md [един от "html", "docx", "odt" или "epub") 

Но какво ще кажете за целия шебанг? Можехме да го направим последно, но не сега? Е, ако мислим малко напред, трябва да отчетем случая, в който ние (или друг потребител) въведем нещо освен четирите избора по-горе - в този случай защо да не изнасяме всичко? Добавете още един малко код, както следва:

 !! / bin / bash file = $ 1 експорт = $ 2 ако ["$ export" == "html"] тогава pandoc -r markdown -w html -o $ file.html $ file elif ["$ export" == "docx "] след това pandoc -r markdown -w docx -o $ file.docx $ файл elif [" $ export "==" odt "] тогава pandoc -r markdown -w odt -o $ file.odt $ file elif [" $ износ "==" epub "], след това pandoc -r markdown -w epub -o $ file.epub $ file else pandoc -r markdown -w html -o $ file.html $ file && pandoc -r markdown -w docx -o $ file.docx $ файл && pandoc -r маркиране -w odt -o $ file.odt $ file && pandoc -r markdown -w epub -o $ file.epub $ file fi 

Сега, ако не въведем нищо след името на файла на командния ред (или неправилното нещо), този скрипт просто ще направи безопасното нещо и ще генерира всички формати.

Добавяне на GUI

Но какво ще стане, ако в този последен случай не искате просто да генерирате всичко, но да направите нещо по-полезно. Можем да добавим още една

 Елиф 

извлечение за генериране на всички формати, когато "all" е въведен в командния ред и променете изявлението, за да отпечатате някой помощен текст:

 !! / bin / bash file = $ 1 експорт = $ 2 ако ["$ export" == "html"] тогава pandoc -r markdown -w html -o $ file.html $ file elif ["$ export" == "docx "] след това pandoc -r markdown -w docx -o $ file.docx $ файл elif [" $ export "==" odt "] тогава pandoc -r markdown -w odt -o $ file.odt $ file elif [" $ износ "==" epub "], след това pandoc -r markdown -w epub -o $ file.epub $ file elif [" $ export "==" all "] тогава pandoc -r markdown -w html -o $ file.html $ file && pandoc -r маркиране -w docx -o $ файл.docx файл и & pandoc -r маркиране -w odt -o $ file.odt $ файл && pandoc -r markdown -w epub -o $ file.epub $ file else echo "Моля, добавете една от следните опции след името на файла: html, odt, docx, epub или all." Fi 

Но ще бъде по-полезно, в случай на празен или неправилен флаг, да показваме GUI, за да помогнем на потребителя заедно. Първо, ще трябва да инсталираме набор от инструменти, наречени "Зенит", които да ни помогнат. Можете да го инсталирате от Софтуерния център или да използвате следната команда:

 sudo apt-get инсталирате зенита 

След това ще трябва да използваме Zenity, за да създадем диалог за нас. Ще искаме нещо, където потребителят може да избере всички или някои от опциите, които разполагаме ... квадратчетата за отметка звучат като правилното тук. Затова създаваме диалогов прозорец Zenity с отметки, представящи всички наши опции:

 #! / bin / bash zenity - списък --checklist - заглавие = "Издател Pandoc" --column = "" --column = "Формат за експортиране" FALSE "html" FALSE "odt FALSE docx" FALSE " " 

Можете да видите как е изработена горната команда Zenity, като прочетете ръководството тук. След това трябва да получим списък с каквито и да било проверки на потребителя и да го зададем на променлива. Добавянето на име на променлива и обвиване на командата Zenity в скоби и добавяне на знак "$" ще покаже на черупката да замени командата вътре с резултата си, когато е направено:

 #! / bin / bash choices = $ (zenity - списък --checklist - заглавие = "Издател Пандок" --column = "" --column = "Формат за експортиране" FALSE "html" FALSE " "FALSE" epub "); 

Сега имаме променлива "$ choices", която съдържа списък (разделен по подразбиране "|") на всички избрани опции. Ще трябва да проверим дали този списък съдържа някои от формите, които планираме да се справя, като използвате "= ~" вместо "==" (това проверява дали има нещо друго в този случай) ... например:

 ако [[$ choices = "" html "]] 

Накрая, бърза модификация на скрипта ще покаже този диалогов прозорец, когато не е предоставен формат, след което изпълнете съответната Pandoc команда, когато тази опция е отметнато в диалоговия прозорец:

 !! / bin / bash file = $ 1 експорт = $ 2 ако ["$ export" == "html"] тогава pandoc -r markdown -w html -o $ file.html $ file elif ["$ export" == "docx "] след това pandoc -r markdown -w docx -o $ file.docx $ файл elif [" $ export "==" odt "] тогава pandoc -r markdown -w odt -o $ file.odt $ file elif [" $ износ "==" epub "], след това pandoc -r markdown -w epub -o $ file.epub $ file elif [" $ export "==" all "] тогава pandoc -r markdown -w html -o $ file.html $ file && pandoc -r маркиране -w docx -o $ файл.docx файл и & pandoc -r маркиране -w odt -o $ file.odt $ файл && pandoc -r markdown -w epub -o $ file.epub $ file Избор на формат "FALSE" html "FALSE" отклонение "FALSE" docx "FALSE" epub " ); ако [[$ choices = "" html "]], тогава pandoc -r markdown -w html -o $ file.html $ file; fi ако [[$ choices = "odt"]], след това pandoc -r markdown -w docx -o $ file.docx $ file; fi ако [[$ choices = "docx"]], след това pandoc -r markdown -w odt -o $ file.odt $ file; fi ако [[$ choices = ~ "epub"]], след това pandoc -r markdown -w epub -o $ file.epub $ file; fi fi 

Точно така, персонализирано приложение с GUI и опции на командния ред.