Trong bài viết trước, chúng tôi đã giới thiệu một số thủ thuật dễ sử dụng để tạo các kịch bản shell đơn giản nhưng hữu ích. Bây giờ chúng ta sẽ đi sâu hơn một chút và thêm một số thông minh cho họ.

Sử dụng điều kiện

Nếu bạn nhớ kịch bản mà chúng ta đã viết lần trước, nó chạy một loạt các lệnh đã sử dụng Pandoc để tạo ra bốn phiên bản của một tài liệu Markdown (trong mỗi HTML, DOCX, ODT và ePub). Nhưng đây là tất cả hoặc không có gì ... hoặc là chúng tôi đã sử dụng Pandoc để biến chúng thành một lúc, hoặc tất cả chúng. Điều gì xảy ra nếu chúng tôi muốn chọn và chọn?

Điều này là đơn giản bằng cách sử dụng điều kiện, về cơ bản là " nếu X là điều này, sau đó làm điều này " báo cáo. Chúng ta hãy nhìn vào kịch bản như chúng ta đã có nó:

 #! / 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 

Giả sử chúng ta muốn có thể chọn một trong các mục trên ở dòng lệnh, hoặc thực hiện tất cả chúng. Một sửa đổi nhanh chóng để kịch bản pandoc-pub.sh như vậy sẽ thực hiện chỉ là:

 #! / bin / bash file = $ 1 xuất = $ 2 nếu ["$ export" == "html"] thì pandoc -r markdown -w html -o $ file.html $ tập tin elif ["$ export" == "docx "] sau đó pandoc -r markdown -w docx -o $ file.docx $ file elif [" $ export "==" odt "] sau đó pandoc -r markdown -w odt -o $ file.odt $ file elif [" $ xuất khẩu "==" epub "] sau đó pandoc -r markdown -w epub -o $ file.epub $ file fi 

Điều đầu tiên chúng tôi đã làm ở đây là cung cấp cho hai biến mà chúng tôi muốn từ tên dòng lệnh: tệp (là tệp nguồn Markdown) và xuất (là định dạng chúng tôi muốn xuất sang. Vì vậy, bây giờ chúng tôi có thể chọn và chọn những gì chúng tôi muốn tạo ra bằng cách sử dụng:

 pandoc-pub.sh [tệp bạn muốn chuyển đổi] .md [một trong hai "html", "docx", "odt" hoặc "epub"] 

Nhưng còn về toàn bộ shebang thì sao? Chúng ta có thể làm điều đó lần trước, nhưng không phải bây giờ? Vâng, nếu chúng ta nghĩ trước một chút, chúng ta nên tính đến một trường hợp mà chúng ta (hoặc một người dùng khác) nhập vào thứ gì đó ngoài bốn lựa chọn ở trên - trong trường hợp này, tại sao không xuất tất cả mọi thứ? Thêm một chút mã như sau:

 #! / bin / bash file = $ 1 xuất = $ 2 nếu ["$ export" == "html"] thì pandoc -r markdown -w html -o $ file.html $ tập tin elif ["$ export" == "docx "] sau đó pandoc -r markdown -w docx -o $ file.docx $ file elif [" $ export "==" odt "] sau đó pandoc -r markdown -w odt -o $ file.odt $ file elif [" $ xuất khẩu "==" epub "] sau đó pandoc -r markdown -w epub -o $ file.epub $ tệp khác pandoc -r markdown -w html -o $ file.html $ tệp && pandoc -r markdown -w docx -o $ file.docx $ file && pandoc -r markdown -w odt -o $ file.odt $ tệp && pandoc -r markdown -w epub -o $ file.epub $ tệp fi 

Bây giờ, nếu chúng ta không nhập gì sau tên tệp tại dòng lệnh (hoặc điều sai), tập lệnh này sẽ làm điều an toàn và tạo tất cả các định dạng.

Thêm GUI

Nhưng nếu, trong trường hợp cuối cùng này, bạn không muốn nó tạo ra mọi thứ, nhưng làm điều gì đó hữu ích hơn. Chúng tôi có thể thêm một

 elif 

tuyên bố để tạo tất cả các định dạng khi "tất cả" được nhập vào dòng lệnh và thay đổi câu lệnh để in một số văn bản trợ giúp:

 #! / bin / bash file = $ 1 xuất = $ 2 nếu ["$ export" == "html"] thì pandoc -r markdown -w html -o $ file.html $ tập tin elif ["$ export" == "docx "] sau đó pandoc -r markdown -w docx -o $ file.docx $ file elif [" $ export "==" odt "] sau đó pandoc -r markdown -w odt -o $ file.odt $ file elif [" $ xuất khẩu "==" epub "] sau đó pandoc -r markdown -w epub -o $ file.epub $ file elif [" $ export "==" tất cả "] sau đó pandoc -r markdown -w html -o $ file.html $ file && pandoc -r markdown -w docx -o $ file.docx $ tệp && pandoc -r markdown -w odt -o $ file.odt $ tệp && pandoc -r markdown -w epub -o $ file.epub $ tệp khác echo "Vui lòng thêm một trong các tùy chọn sau sau tên tệp: html, odt, docx, epub hoặc tất cả." fi 

Nhưng nó sẽ hữu ích hơn, trong trường hợp cờ trống hoặc không chính xác, chúng tôi sẽ hiển thị GUI để giúp người dùng. Đầu tiên, chúng ta sẽ cần phải cài đặt một bộ công cụ gọi là Thiền để giúp chúng ta. Bạn có thể cài đặt phần mềm này từ Trung tâm Phần mềm hoặc sử dụng lệnh sau:

 sudo apt-get cài đặt zenity 

Tiếp theo, chúng ta sẽ cần phải sử dụng Thiền để tạo ra một hộp thoại cho chúng ta. Chúng tôi sẽ muốn một cái gì đó mà người dùng có thể chọn tất cả hoặc một số tùy chọn chúng tôi đã có sẵn ... hộp kiểm âm thanh như điều đúng ở đây. Vì vậy, chúng tôi tạo một hộp thoại Thiền với các hộp kiểm đại diện cho tất cả các tùy chọn của chúng tôi:

 #! / bin / bash zenity --list --checklist --title = "Pandoc Publisher" --column = "" --column = "Định dạng xuất" FALSE "html" FALSE "odt" FALSE "docx" FALSE "epub " 

Bạn có thể xem cách lệnh Zenity ở trên được xây dựng bằng cách đọc hướng dẫn tại đây. Tiếp theo, chúng ta cần lấy danh sách những gì người dùng kiểm tra và gán nó cho một biến. Thêm một tên biến và gói lệnh Zenity trong dấu ngoặc đơn và thêm dấu "$" sẽ cho trình bao để thay thế lệnh bên trong với kết quả của nó khi nó được thực hiện:

 #! / bin / bash choice = $ (zenity --list --checklist --title = "Pandoc Publisher" --column = "" --column = "Định dạng xuất" FALSE "html" FALSE "odt" FALSE "docx "FALSE" epub "); 

Bây giờ chúng ta có một biến “$ choice” có chứa một danh sách (cách nhau bởi “|” theo mặc định) của tất cả các tùy chọn được chọn. Chúng tôi sẽ cần kiểm tra xem danh sách đó có chứa bất kỳ định dạng nào mà chúng tôi đang lập kế hoạch để xử lý bằng cách sử dụng "= ~" thay vì "==" hay không (trong trường hợp này) ... thí dụ:

 nếu [[$ choice = ~ "html"]] 

Cuối cùng, việc sửa đổi nhanh kịch bản sẽ hiển thị hộp thoại này khi không có định dạng nào được cung cấp, sau đó chạy lệnh Pandoc phù hợp khi tùy chọn đó được chọn trong hộp thoại:

 #! / bin / bash file = $ 1 xuất = $ 2 nếu ["$ export" == "html"] thì pandoc -r markdown -w html -o $ file.html $ tập tin elif ["$ export" == "docx "] sau đó pandoc -r markdown -w docx -o $ file.docx $ file elif [" $ export "==" odt "] sau đó pandoc -r markdown -w odt -o $ file.odt $ file elif [" $ xuất khẩu "==" epub "] sau đó pandoc -r markdown -w epub -o $ file.epub $ file elif [" $ export "==" tất cả "] sau đó pandoc -r markdown -w html -o $ file.html $ file && pandoc -r markdown -w docx -o $ file.docx $ tệp && pandoc -r markdown -w odt -o $ file.odt $ tệp && pandoc -r markdown -w epub -o $ file.epub $ tệp else choices = $ (zenity --list --checklist --title = "Pandoc Publisher" --column = "" --column = "Định dạng xuất" FALSE "html" FALSE "odt" FALSE "docx" FALSE "epub" ); nếu [[$ choice = ~ "html"]] thì pandoc -r markdown -w html -o $ file.html $ file; fi nếu [[$ choice = ~ "odt"]] thì tệp pandoc -r markdown -w docx -o $ file.docx $; fi nếu [[$ choice = ~ "docx"]] thì pandoc -r markdown -w odt -o $ file.odt $; fi nếu [[$ choice = ~ "epub"]] thì pandoc -r markdown -w epub -o $ file.epub $ file; fi fi 

Cũng giống như vậy, một ứng dụng được cá nhân hóa với các tùy chọn GUI và dòng lệnh.