01 May 2016

Mengenal Shell Script (Konversi TXT ke PDF)

Seperti skrip-skrip yang sudah banyak anda kenal, skrip biasanya digunakan untuk memepercepat, mempermudah pekerjaan, automatisasi atau yang lain.

Skrip yang paling sering kita lihat mungkin bash script, java script, atau skrip dari bahasa-bahasa interpreter terkenal lain seperti python, perl, lua dan lain-lain, di OS Windows kita juga sering lihat skrip semisal file konfigurasi folder yang biasa berekstensi *.ini, *.bat atau yang lain itu (--dulu, entah sekarang) :)

Yup, ga perlu muluk-muluk, kita pakai saja apa yang paling sering kita lihat, kali ini saya akan memakai 'bash' bisa juga 'sh' atau keluarganya :D
Di sini saya menggunakan Ubuntu 14.04 Desktop, bash dan LibreOffice sudah terpasang secara default.

Hasil ahir skrip yang digunakan praktik kali ini berfungsi untuk merubah semua file *.txt dalam sebuah folder ke format PDF, dan menggabungkan semua file PDF tadi menjadi satu buah file.
Untuk mempermudah gambaran, kita juga akan menggunakan tool-tool lain, kebanyakan sudah terpasang secara default (core utils), yang belum terpasang mungkin:

  • unoconv tool yang menggunakan UNO bindings LibreOffice untuk mengkonversi format file (kali ini *.txt ke *.pdf)
  • pdftk tool ini kita gunakan untuk menggabungkan file-file *.pdf menjadi sebuah file PDF tunggal

install kedua tool ini dengan perintah:
sudo apt-get install unoconv pdftk


:: Awal

Langsung saja, langkah pertama kita membuat file skripnya tentu :)
Kita buat sebuah file kosong bernama "skrip.sh" dengan hak eksekusi (+x);

Misal dari terminal ketik:
> skrip.sh && chmod +x skrip.sh



Silakan buka dengan teks editor yang anda suka, sebagai contoh di sini saya menggunakan gedit;

Contoh skrip, ketik saja dalam file tadi:

#!/bin/bash
# Menunjukkan bahwa skrip yang kita tulis ini akan dieksekusi menggunakan bash

# Menulis kata
date > Hasil.log
# Perintah ini akan menulis tanggal pada sebuah file baru bernama "Hasil.log" (>); akan menimpa file lama jika file sudah ada

# Menyisipkan kata
echo >> Hasil.log
# Perintah ini akan menyisipkan baris baru --sama dengan
<printf "\n">, pada file "Hasil.log" 'yang sudah ada' (>>); atau membuat file baru jika belum ada

echo akan menuliskan sesuatu, tapi karna echo tidak diikuti apapun jadi hanya berupa baris kosong sama seperti fungsi printf, contoh printf di belakang.

Simpan dan coba jalankan skrip tadi dengan terminal:
./skrip.sh



Skrip ini akan menghasilkan sebuah file baru bernama "Hasil.log", coba buka file ini dan lihat apa yang ada di dalamnya :)

:: Loop

Apakah bash script juga bisa menggunakan loop seperti dalam bahasa pemrograman lain?

Hmm.. keknya bisa.

Di sini kita akan memanfaatkan unoconv untuk contoh looping dalam skrip ini, sebagai catatan unoconv bisa digunakan untuk membuat file *.pdf dari file *.txt yang ada secara masal dengan sebuah perintah saja: unoconv *.txt; dan file-file PDF-pun jadi.

Tapi ini adalah contoh looping; nanti bisa dipraktikkan untuk hal lain.
Misal loop dengan menggunakan for.

Contoh skrip:

# Looping
for file in *.txt; do unoconv -v -o TXT2PDF/"$file".pdf "$file"; done >> Hasil.log
# Konversi semua file berekstensi *.txt ke *.pdf dalam directory "TXT2PDF"


Dalam contoh ini, 'file' adalah variabel yang digunakan untuk mewakili nama-nama file *.txt; sekaligus digunakan untuk variabel nama hasil output perintah unoconv; untuk lebih jelas tentang opsi perintah unoconv, bisa dilihat dengan perintah: unoconv -h

Soal bentuk, kurang lebih sama dengan bahasa-bahasa pemrograman lain, kalau diumpamakan dengan bahasa pemrograman C misal, bagian yang ada setelah kata kunci for adalah bagian untuk membatasi cakupan ruang lingkup variabel, bagian ini diahiri dengan tanda titik koma; di C bagian ini adalah statement-statement yang ada dalam kurung itu.

Diikuti dengan kata kunci do yang berisi perintah yang dikerjakan, di C bagian ini adalah bagian setelah tanda kurung, baik itu statement yang kemudian diahiri dengan titik koma atau statement-statement yang dipisah dengan titik koma dalam kurung kurawal jika statement lebih dari satu.

:: Perintah lain

# Menambah perintah apapun yang anda suka, coba dengan perintah-perintah lain yang biasa anda eksekusi di terminal :)
pdftk TXT2PDF/*.pdf cat output Hasil.pdf
# Gabung semua file PDF yang ada dalam directory "TXT2PDF" menjadi "Hasil.pdf"

# Menghapus file sampah & contoh printf
printf "\nHapus:\n" >> Hasil.log
rm -rv TXT2PDF >> Hasil.log
# Hapus directory "TXT2PDF" dan isinya


# File *.log
# rm *.log


Hmm.. sebenarnya masih ada banyak yang lain, seperti operasi logika dll, tapi sepertinya terlalu panjang.. ini cuman perkenalan, tar malah jadi tutorial :D

Yah untuk sementara ini dulu, sekarang kita coba skrip ini dari terminal dengan perintah seperti tadi:
./skrip.sh



... Bisa ka?


Contoh skrip.sh:
https://goo.gl/0XsUOT


:: Selesai

Dan... sekian dulu, skrip-skrip sederhana seperti ini bisa dimanfaatkan untuk banyak hal, misal auto-shutdown atau perintah-perintah terjadwal lain, dengan cara sangat sederhana memanfaatkankan aplikasi bawaan seperti cron, insya Allah untuk contoh penggunaan cron besuk kalau ada waktu.

Sekali lagi, ini sekedar cara saya mengenal skrip bash, tentang cara yang lebih efektif atau software yang lebih handal tentu banyak, semisal untuk sekedar menggabungkan file *.txt menjadi satu buah file bisa dengan mudah dikerjakan dengan find dan cat contoh:

find *.txt -exec cat > hasil.txt {} \;

dan hasilnya bisa diedit bahkan dengan format yang lebih leluasa menggunakan LibreOffice; yup, sekali lagi, ini sekedar cara saya mengenal skrip :)
Tapi tetep, kalau terdapat kekeliruan, atau cara lain yang lebih efektif/menarik, masukan akan selalu ditunggu.

---
sumber: berbagai sumber.