Περισσότερα για το Shell Script: Προσθήκη συνθηκών και GUI
Στο τελευταίο μας άρθρο, πήγαμε μερικά εύχρηστα κόλπα για να φτιάξουμε απλά αλλά χρήσιμα σενάρια κελυφών. Τώρα θα βουτήξουμε λίγο περισσότερο και θα προσθέσουμε κάποια νοημοσύνη σε αυτούς.
Χρήση των προϋποθέσεων
Αν θυμάστε το σενάριο που γράψαμε τελευταία φορά, έτρεξε μια σειρά εντολών που χρησιμοποίησαν το Pandoc για να δημιουργήσουν τέσσερις εκδόσεις ενός εγγράφου Markdown (σε κάθε HTML, DOCX, ODT και ePub). Αλλά αυτό ήταν όλα ή τίποτα ... είτε χρησιμοποιήσαμε τον ίδιο τον Πάντοκ για να τα κάνουμε ένα κάθε φορά, ή αλλιώς όλα αυτά. Τι γίνεται αν θέλαμε να επιλέξουμε;
Αυτό είναι απλό χρησιμοποιώντας τα Conditionals, τα οποία είναι κατά βάση " αν το X είναι αυτό, τότε κάνετε αυτό " δηλώσεις. Ας ρίξουμε μια ματιά στο σενάριο όπως το είχαμε:
#! / 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
Ας υποθέσουμε ότι θέλουμε να είμαστε σε θέση να επιλέξουμε ένα από τα παραπάνω στοιχεία στη γραμμή εντολών ή να τα κάνουμε όλα αυτά. Μία γρήγορη τροποποίηση του σεναρίου pandoc-pub.sh θα το κάνει ακριβώς έτσι:
!! / bin / bash file = $ 1 εξαγωγή = $ 2 αν ["$ export" == "html"] τότε pandoc -r markdown -w html -o $ file.html $ αρχείο elif ["$ export" == "docx "] τότε pandoc -r markdown -w docx -o $ file.docx $ αρχείο elif [" $ export "==" odt "] τότε pandoc -r markdown -w odt -o $ file.odt $ αρχείο elif [" $ εξαγωγή "==" epub "] τότε pandoc -r markdown -w epub -o $ file.epub $ file fi
Το πρώτο πράγμα που κάναμε εδώ είναι να δώσουμε τις δύο μεταβλητές που θέλουμε από τα ονόματα των γραμμών εντολών: το αρχείο (το οποίο είναι το αρχείο πηγαίου κώδικα Markdown) και την εξαγωγή (που είναι το σχήμα στο οποίο θέλουμε να εξαγάγουμε.) Τώρα μπορούμε να διαλέξουμε τι θέλουμε να δημιουργήσουμε χρησιμοποιώντας:
pandoc-pub.sh [αρχείο που θέλετε να μετατρέψετε] .md [ένα από τα "html", "docx", "odt" ή "epub"]
Αλλά τι γίνεται με το σύνολο του shebang; Θα μπορούσαμε να κάνουμε αυτή την τελευταία φορά, αλλά όχι τώρα; Λοιπόν, αν σκεφτούμε λίγο, θα πρέπει να αναφέρουμε μια περίπτωση όπου εμείς (ή άλλος χρήστης) εισάγουμε κάτι εκτός από τις τέσσερις επιλογές παραπάνω - σε αυτή την περίπτωση, γιατί να μην εξάγουμε τα πάντα; Προσθέστε ένα ακόμη κομμάτι κώδικα ως εξής:
!! / bin / bash file = $ 1 εξαγωγή = $ 2 αν ["$ export" == "html"] τότε pandoc -r markdown -w html -o $ file.html $ αρχείο elif ["$ export" == "docx "] τότε pandoc -r markdown -w docx -o $ file.docx $ αρχείο elif [" $ export "==" odt "] τότε pandoc -r markdown -w odt -o $ file.odt $ αρχείο elif [" $ εξαγωγή "==" epub "] τότε pandoc -r markdown -w epub -o $ file.epub $ αρχείο άλλο pandoc -r markdown -w html -o $ file.html $ αρχείο && pandoc -r markdown -w docx -o $ αρχείο.docx $ αρχείο && pandoc -r markdown -w odt -o $ file.odt $ αρχείο && pandoc -r markdown -w epub -o $ file.epub $ file fi
Τώρα, αν δεν εισάγουμε τίποτα μετά το όνομα του αρχείου στη γραμμή εντολών (ή το λάθος πράγμα), αυτό το σενάριο θα κάνει μόνο το ασφαλές πράγμα και θα δημιουργήσει όλες τις μορφές.
Προσθήκη GUI
Αλλά τι γίνεται αν, σε αυτή την τελευταία περίπτωση, δεν θέλετε να παράγει μόνο τα πάντα, αλλά κάνετε κάτι πιο χρήσιμο. Θα μπορούσαμε να προσθέσουμε ένα άλλο
elif
για να δημιουργήσετε όλες τις μορφές όταν εισάγετε "all" στη γραμμή εντολών και αλλάξτε τη δήλωση για να εκτυπώσετε κάποιο κείμενο βοήθειας:
!! / bin / bash file = $ 1 εξαγωγή = $ 2 αν ["$ export" == "html"] τότε pandoc -r markdown -w html -o $ file.html $ αρχείο elif ["$ export" == "docx "] τότε pandoc -r markdown -w docx -o $ file.docx $ αρχείο elif [" $ export "==" odt "] τότε pandoc -r markdown -w odt -o $ file.odt $ αρχείο elif [" $ εξαγωγή "==" epub "] τότε pandoc -r markdown -w epub -o $ file.epub $ αρχείο elif [" $ export "==" all "] τότε pandoc -r markdown -w html -o $ file.html $ file && pandoc -r markdown -w docx -o $ αρχείο.docx $ αρχείο && pandoc -r markdown -w odt -o $ file.odt $ αρχείο && pandoc -r markdown -w epub -o $ file.epub $ file else echo "Προσθέστε μία από τις ακόλουθες επιλογές μετά το όνομα αρχείου: html, odt, docx, epub ή όλα." fi
Αλλά θα είναι πιο χρήσιμο το γεγονός ότι, σε περίπτωση κενής ή λανθασμένης σημαίας, εμφανίζουμε ένα GUI για να βοηθήσουμε τον χρήστη μαζί. Πρώτον, θα πρέπει να εγκαταστήσουμε ένα σύνολο εργαλείων που ονομάζονται Zenity για να μας βοηθήσουν. Μπορείτε να το εγκαταστήσετε από το Κέντρο λογισμικού ή να χρησιμοποιήσετε την παρακάτω εντολή:
sudo apt-get εγκαταστήσετε zenity
Στη συνέχεια, θα χρειαστεί να χρησιμοποιήσουμε το Zenity για να δημιουργήσουμε ένα διάλογο για εμάς. Θα θέλαμε κάτι όπου ο χρήστης μπορεί να επιλέξει όλες ή ορισμένες από τις επιλογές που διαθέτουμε ... Τα πλαίσια ελέγχου ακούγονται σαν το σωστό εδώ. Έτσι δημιουργούμε ένα διάλογο Zenity με πλαίσια ελέγχου που αντιπροσωπεύουν όλες τις επιλογές μας:
#! / bin / bash zenity --list --checklist --title = "Εκδότης Pandoc" --column = "" --column = "Εξαγωγή μορφής" FALSE "html" FALSE "odt" FALSE " "
Μπορείτε να δείτε πώς κατασκευάζεται η παραπάνω εντολή Zenity διαβάζοντας το εγχειρίδιο εδώ. Στη συνέχεια, πρέπει να λάβουμε τη λίστα όσων ελέγχονται από τον χρήστη και να την αντιστοιχίσουμε σε μια μεταβλητή. Προσθέτοντας ένα όνομα μεταβλητής και περιτυλίγοντας την εντολή Zenity σε παρενθέσεις και προσθέτοντας ένα σύμβολο "$" θα πείτε στο κέλυφος να αντικαταστήσει την εντολή στο εσωτερικό με το αποτέλεσμά της όταν ολοκληρωθεί:
#! / bin / bash choices = $ (zenity --list --checklist --title = "Εκδότης Pandoc" --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 $ αρχείο elif ["$ export" == "docx "] τότε pandoc -r markdown -w docx -o $ file.docx $ αρχείο elif [" $ export "==" odt "] τότε pandoc -r markdown -w odt -o $ file.odt $ αρχείο elif [" $ εξαγωγή "==" epub "] τότε pandoc -r markdown -w epub -o $ file.epub $ αρχείο elif [" $ export "==" all "] τότε pandoc -r markdown -w html -o $ file.html $ file && pandoc -r markdown -w docx -o $ αρχείο.docx $ αρχείο && pandoc -r markdown -w odt -o $ file.odt $ αρχείο && pandoc -r markdown -w epub -o $ file.epub $ file αλλιώς επιλογές = $ (zenity --list --checklist --title = "Εκδότης Pandoc" --column = "" --column = "Εξαγωγή μορφής" FALSE "html" FALSE "odt FALSE docx FALSE epub" ) · αν [[$ choices = ~ "html"]] τότε pandoc -r markdown -w html -o $ file.html $ αρχείο; fi αν [[$ choices = ~ "odt"]] τότε pandoc -r markdown -w docx -o $ file.docx αρχείο; fi αν [[$ choices = ~ "docx"]] τότε pandoc -r markdown -w odt -o $ file.odt $ αρχείο; fi εάν [[$ choices = ~ "epub"]] τότε pandoc -r markdown -w epub -o $ file.epub $ αρχείο; fi fi
Ακριβώς έτσι, μια εξατομικευμένη εφαρμογή με GUI και επιλογές γραμμής εντολών.