Basic Bash Programming
Assalamu’alaikum Wr. Wb. Sebelum kita mulai, mari kita berdo’a menurut agama dan kepercayaan masing2. Berdo’a mulai….
Berdo’a selesai…
Sebelumnya kita akan membahas mengenai Basic Bash Programming…
Oke kita mulai.
Basic Bash Programming adalah salah satu bahasa bash program dan merupakan bahasa umum yang digunakan dalam distro linux. Di dalam UNIX Systems terdapat beberapa jenis tipe bash itu sendiri, misal saya menggunakan Distro Ubuntu 16.x maka ketika saya jalankan perintah :
cat /etc/bashs
# /etc/bashs: valid login bashs
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
hasilnya seperti itu
Ada /bin/sh, dash,bash, rbash
Selain dari itu, ada pula jenis bash yang lain seperti :
csh
tcsh
ksh
Apa itu ? Mungkin dari sebagian yang disebutkan ada beberapa yang familiar ada yang unfamiliar.
R –> Fredy : Gue cuma tau bash
dan sh
. Sisa nya nga pernah denger
Apa sih itu semua ?
sh
atau bourne bash adalah bash original dari UNIX Systems, bahkan android masih murni menggunakansh
, dalam konsolnya.bash
atau bourne again bash adalah bash standard milik GNU bash, disebut juga superset karena dia telah memiliki fitur dan addon yg lebih banyak dari sh.csh
atau C bash adalah bash yang menggunakan bahasa pemrograman menyerupai bahasa pemrograman C.tcsh
atau TENEX C bash adalah superset dari C bash yang biasa namun memiliki kemampuan lebih dari csh, bash jenis ini banyak disebut Turbo C bashksh
atau Korn bash adalah superset bash tingkat lanjut dari Bourne bash yang tidak direkomendasikan untuk pemula, dimana bash ini dibangun oleh orang2 dengan background UNIX user.dash
atau Debian Almquist bash adalah bash yang mengimplementasikan POSIX yang sangat kecil dan ringan, merupakan turunan dariash
(the Almquist bash) dimana dash ini mulai digunakan saat DebianSqueeze dan Ubuntu 6.10.rbash
atau Restricted Bash adalah salah satu Linux bash yang melakukan restrict terhadap beberapa fitur pada bash bash.
Restriction pada rbash
:
- cd command (Change Directory)
- PATH (setting/ unsetting)
- ENV aka BASH_ENV (Environment Setting/ unsetting)
- Importing Function
- Specifying file name containing argument ‘/’
- Specifying file name containing argument ‘-‘
- Redirecting output using
>
,>>
,>|
,<>
,>&
,&>
- turning off restriction using
set +r
orset +o
Nah itu adalah jenis2 bash pada UNIX Systems yang pada bahasan kali ini kita akan persempit materi pada bash. Sebelumnya, adakah yang disini pengguna bash ? atau senantiasa menggunakan bash sehari-harinya ?
R Adzim: belum pernah Mas
Oke lanjut klo gitu. Bash, saya biasa menggunakan bash untuk melakukan otomasi terhadap sistem Linux yang saya pakai. Mulai dari untuk backup, untuk check security system dll. Nah disini akan kita bahas, bagaimana menggunakan basic bash itu sendiri.
Saya anggap semua uda didepan komputer masing2.
kita buat folder belajar dan buat file tes.sh
:
mkdir belajar
touch tes.sh
T #tanya, ini menggunakan win/linux?
J pake weddus monggo pake linux monggo. klo weddus silahkan pake mingw ato git-bash dll
kalau sudah kita vim tes.sh
monggo gunakan editor kesukaan masing-masing, pake nano, vim, geany, npp
, dll dan isikan konten berikut :
#!/bin/bash
echo "Hello World"
echo Hello World
echo 'Hello World'
R Adzim: Enggak chmod om.?
J nanti dulu, klo sudah monggo di execute : bash tes.sh
R Adzim: Siappp om
Untuk melihat step by step execute monggo gunakan bash -x tes.sh
Apa hasilnya ?
R Adzim: Ada plus nya om di depan echo
J : uda dicoba belum ? ya itu adalah instruksi yang dieksekusi oleh bash.
R + instruksi
bla.. bla… -> ini adalah outputnya
Sekarang kita ganti kontennya sbb:
#!/bin/bash
echo Hallo $USER
echo "Hallo $USER"
echo 'Hallo $USER'
Silahkan, sampaikan argumen masing-masing hasil dari eksekusi diatas. Apa kesimpulan yg bisa didapat dari command diatas?
R Ashokani: lg ngetik sambil makan, bntar om
R Adzim: $USER nge-get user si laptop yak om.?
T lah hasilnya gimana ? apa kesimpulannya ?
R Adzim: ehh USER yang aktif yak om.?
R Adzim: Hallo jukir
Hallo jukir
Hallo $USER
karena user nya jukir
R Adzim: Hallo root
Hallo root
Hallo $USER
ini kalo root om
T trus apa kesimpulan dari 3 perintah itu ?
R Om Ronald Simanjuntak: Kalau pakai ‘ variable sistem tidak diproses, tapi dianggap sebagai string biasa
R Adzim: 1. $USER
berarti ngambil user aktif,
2. jika menggunakan ‘(petik satu) maka tidak bisa menampilkan isi variabel
R Ashokani: tapi kog kalo double quote gak dianggak string juga ya ?
R Om Ronald Simanjuntak: Seperti di php saja
J Oke, Kesimpulannya quotes, double quotes, tanpa berbeda perlakuannnya dalam bash yak.
Kita lanjut materinya.
Dalam bash ada istilah STDIN
, STDOUT
, STDERR
Ada yang tahu tentang ketiganya ?
R Ashokani: stdin itu input, stdout itu buat output ??
R Adzim: kalo ga salah ngambil atau ngeluarin param dari command bash
R Om Ronald Simanjuntak: I/O stream , To read / write input
J : Semuanya benar. stderr adalah output berupa error bila ada error maka stderr ada valuenya.
oke lanjut…
T pernah ga menggunakan 3 descriptor diatas ?
R di bash ?
R Adzim: kalo cat file_name.txt
termasuk ga om.?
R Ashokani: belum tau
T nah itu yg mana stdin, stdout, dan stderr nya ?
J ketika kita melakukan cat fliename.txt maka stdout dia akan berisi hasil dari cat tersebut.
stdin dimana ? stderr dimana ?
stdin akan berisi value bila ia menerima input dari user.
sedangkan stderr akan berisi value bia command yang dilakukan ternyata menghasilkan error.
T Ashokani: stdin itu perintah yang diberikan bukan ? cat fliename.txt
J bukan
Balik lagi ke bash. Sekarang kita uban kontent tes.sh
mari kita ubah konten tes.sh menjadi :
#!/bin/bash
read -p "Masukkan nama anda ($USER) : " nama
echo "Nama anda : $nama"
printf "%s : %s\n" "Nama anda (printf)" $nama
Nanti kita akan masuk dan melihat dimana sih stdin
, stdout
, dan stderr
Apa hasilnya ? Setelah dieksekusi ?
R Ashokani: bash test.sh
Masukkan nama anda (ashoka) : tukimin
Nama anda : tukimin
Nama anda (printf) : tukimin
R Ashokani: itu printf dalam kurung nya buat apa ?
T kira-kira buat apa ?
J itu ga ada artinya kok… wkwk
R Ashokani: oh itu cuma penanda aja ya,jadi ada 2 macam perintahuntuk menampilkan nya
pake echo dan printf .
J yap, jangan lupa. printf ada format string disitu.
R Adzim: enggak beda om kalau dipake huruf atau angka
Kesimpulan dari konten echo dan printf:
- Kita mengambil input dari user, itu adalah stdin.
- Kita menampilkan variable hasil stdin itu adalah stdout.
- penggunaan echo dan printf berbeda.
Trus gimana menggunakan stdin
, stdout
dan stderr
ini dalam bash script ?
Menggunakan stdin
biasa dimulai dengan 0<
Menggunakan stdout
biasa dimulai dg 1>
Menggunakan stderr
biasa dimulai dg 2>
Mari kita tes, silahkan eksekusi perintah berikut:
echo "Hallo bro" > tes.txt
cat tes.txt
cat 0< tes.txt
T apa hasilnya ?
R Ashokani: hasilnya ya Hallo bro
T apa kesimpulannya ?
R Ashokani: enggak ada error nya
T kok bisa cat 0< tes.txt
hasilnya Hallo bro ?
R Adzim: nah ini mas.?
T sekarang coba eksekusi las “hallo”
R Ashokani: las nya nggak ada
R Adzim: command not found mas
T pasti error, sy ingin menyimpan hasil stderrnya, gimana hayo caranya ?
sudah seharusnya, nah saya ingin menyimpan hasil error itu ke file error_log gimana carany ?
caranya gampang :
las "hallo" 2>error_log
cat error_log
coba gimana hasilnya ?
R Adzim: las: command not found Om
R Adzim: itu 2>
stderr om .?
J iya itu aplikasi stderr, coba diperhatikan secara seksama ketika kita eksekusi las “hello”, maka error akan langsung keluar kan ?
ketika eksekusi las “hello” 2>error_log
, maka tidak muncul apa2. namun ketika kita cat error_log errornya ternyata ada disitu. ya ga ?
hasilnya error las command not foud
memanggil error_log las
td
nah kita lanjut… Sekarang variable dan local variable.
Sekarang kita ganti konten tes.sh menjadi :
#!/bin/bash
HELLO=Hello
function hello {
local HELLO=World
echo $HELLO
}
echo $HELLO
hello
echo $HELLO
apa hasilnya ? trus coba dihapus tulisan local apa hasilnya ?
R Ashokani: bash test.sh
pake local
Hello
World
Hello
R Adzim: tanpa local
R Ashokani: gak pake local
bash test.sh
Hello
World
World
R Adzim: Hello
World
World
T Adzim: di bash itu sepasi dianggap delemiter ya om.?
J tergantung .
paham yak beda global variable dan local variable.
Kita lanjut coba bikin simple backup pake bash script.
Eh sebelum masuk situ, kita belajar dulu command subtitution
ubah kontent tes.sh
menjadi :
#!/bin/bash
mydir=$(pwd)
echo "Lokasi mydir : $mydir"
echo "Lokasi mydir : $(pwd)"
echo "Lokasi mydir : `pwd`"
coba cek hasilnya.
R Ashokani: hasilnya ngeprint perintah pwd
bash test.sh
Lokasi mydir : `/mnt/c/Users/Ashokani/belajar`
Lokasi mydir : `/mnt/c/Users/Ashokani/belajar`
Lokasi mydir : `/mnt/c/Users/Ashokani/belajar`
R Adzim:
Lokasi mydir : `/Users/jukir/Desktop`
Nah, itu adalah command subtitution
R Adzim: sebanyak 3 kali
Bila ingin menyimpan hasil suatu perintah kedalah variable gunakan $(command)
Lanjut sekarang tambahkan di konten tes.sh:
echo 1+1
echo $((1+1))
echo $[1+1]
apa hasilnya ?
itu adalah penerapan arithmetic evaluation
R Ashokani: 1+1
2
2
R Adzim: 1+1 (dianggap string yak mas.?)
2
2
J yup
Apa bedanya ? $((param))
dan $[param]
?
itu bedanya cuma cara panggilnya, secara fungsi sama.
R Adzim: waduuh,
Oke. kita coba bikin script backup pake bash script, ubah tes.sh:
#!/bin/bash
backupdir=$(pwd)
outputfile=$HOME/my_backup_$(date +%Y%m%d)_$(date +%H%M%S).tar.gz
echo "Backup $backupdir in progress..."
echo
tar -czvf $outputfile $backupdir > /dev/null 2>&1
echo "Lokasi hasil backup : $outputfile"
Apa hasilnya ? dimana hasilnya ?
Oh iya buat momod jam 23.00 kita nanti sudahi ya.
lumaya 3 jam cuma bahas basic.
R Ashokani: keburu pada ngantuk om ??
R Ashokani: Lokasi hasil backup : /home/ashoka/my_backup_20170415_222103.tar.gz
Silahkan di evaluasi scriptnya. Untuk PR : Buatlah script backup tersebut hanya akan backup folder belajar. bila didalam folder ada filenya.??
T Adzim: tapi dicari file nya ga ada om
J di folder $HOME
Dzim
ywd, mungkin karena sudah malam. Mungkin kita sudahi kulwap kali ini. Sesi tanya jawab, silahkan bila ada yg ingin bertanya.
yang penting tag #Tanya jangan lupa. Ada panggilan dedek nih, jadi kepada momod saya kembalikan. Terima kasih atas perhatiannya, semoga bermanfaat.
Wassalamu’alaikum Wr. Wb.
Luphy Phaluphy Poetryjatmiko : Thanks mas @Eko Junaidi Salam Ilmu nya ..
Semoga manfaat amiinn…