
Coba postingan
Teruslah Berkarya Untuk Negeriku
$ mkdir $HOME/bin $ cd $HOME/bin $ mcedit hello.shpIsi Skrip
#!/bin/bash # Baris pertama script bash harus seperti di-atas # Selanjutnya baris dengan tanda # di depan adalah komentar # Ini perintah yang akan dijalankan echo "Hello newbie" echo "Your shell is speaking here ..."
$ chmod +x hello.sh $ ./hello.sh
# Atur prompt set PS1= set PS1= # Bikin supaya terminal colourfull eval `dircolors -b` # Tambah path export PATH=$PATH:~/bin
#!/bin/bash # File: bash1.sh # Macam-macam output # Output string, perhatikan petik dua dan petik satu echo "Linus said: " echo -n ' "See, you not only have to be a good coder to create a system like Linux, ' echo 'you have to be a sneaky bastard too ;-)" '
#!/bin/bash # File : bash102.sh # Mengisi variabel dengan konstanta SISOP="Linux" # Tampilkan isinya echo "Saya suka" $SISOP # Ubah isinya, tampilkan SISOP="Open Source" echo "dan semua" $SISOP
$ set | lessDan mendefinisikannya dengan perintah export
$ export GELAR="Newbie"
#!/bin/bash # Tampilkan variabel environment echo "Hi " $GELAR $USERNAME
#!/bin/bash echo "Hai, siapa namamu ? read NAME echo "Salam kenal" $NAME ", saya " $SHELL!
$ date Sun Feb 28 02:34:20 WIT 2010 $ date --help $ date +%H:%M:%S 02:36:22 $ date +%d-%m-%Y 28-02-2010Nah, sekarang mari buat skrip menerima masukan dari program date.
#!/bin/bash # menerima masukan dari program lain, perhatikan tanda kutipnya JAM=`date +%H` MENIT=`date +%M` echo "Sekarang jam" $JAM:$MENITroot@igos-desktop:~/bin#
#!/bash # Beberapa variabel string DISTRO1="UBuntu" DISTRO2="Slackware" DISTRO3="Fedora" # Ini menggabung string, pakai tanda kutip berbeda S1="$DISTRO1 $DISTRO2 $DISTRO3, semuanya Linux !" S2='$DISTRO1 $DISTRO2 $DISTRO3, pokoknya Linux !' # Hati-hati kalau nama variabel tersambung tanpa spasi S3="$DISTRO1-Linux !" S4="$DISTRO2Linux !" S5='${DISTRO3}Linux !' echo $S1 echo $S2 echo $S3 echo $S4 echo $S5
#!/bin/bash # Ayo berhitung ... echo "1+1=" 1+1 echo "1+2=" $[2+1] echo "1*3=" $[1*3] echo "1/4=" $[1/3]
#!/bin/bash echo -n "Masukkan sebuah password : " read password if [ $password == eureka ]; then echo "you're right." fi # Kalau mau aman ... gunakan tanda petik pada argumen if [ "$password" == "eureka" ]; then echo "you're right, and so am I." fi
Masukkan sebuah password : eureka you're right.Coba masukkan password dengan lebih dari dua kata, misal linux oke.
#!/bin/bash echo "Hore, hari belajar open source."
#!/bin/bash # Hari padepokan, gunakan "Sabtu" kalau locale Indonesia HARI_PADEPOKAN="Saturday" # Hari ini, tanya pada program date HARI_INI=`date +%A` echo "Ini hari" $HARI_INI # Pencabangan, periksa apakah HARI_INI sama dengan HARI_PADEPOKAN if [ $HARI_INI == $HARI_PADEPOKAN ]; then # bagian ini hanya akan dijalankan kalau pemeriksaan oleh if BENAR echo "Hore ... saatnya belajar open source !!!" fi # kalau SALAH, langsung loncat ke sini
#!/bin/bash # definisi hari, gunakan "Sabtu" dan "Minggu" kalau locale Indonesia HARI_PADEPOKAN="Saturday" HARI_LIBUR="Sunday" # Hari ini, tanya pada program date HARI_INI=`date +%A` echo "Ini hari $HARI_INI" # Pencabangan dengan tiga kasus: if [ $HARI_INI == $HARI_PADEPOKAN ]; then echo "Hore ... hari belajar open source !!!" elif [ $HARI_INI == $HARI_LIBUR ]; then echo "Hari libur :D" else echo "Ayo kerja, semangat !!!" fi
#!/bin/bash # Bulan, tanya pada program date BULAN_INI=`date +%B` echo "Bulan: " $BULAN_INI # Pencabangan pakai case case $BULAN_INI in Ju??|'August'|'September') # pilihan pertama echo "Musim kemarau" ;; # akhiri dengan dua titik koma 'December'|*ry|'March') # pilihan kedua echo "Musim hujan" ;; *) # pilihan sisa echo "Musim pancaroba" ;; esac
#!/bin/bash # echo "Distro-distro Linux:" # Ini cara tak pakai loop echo Linux from Scratch echo Gento echo Damn Small Linux echo Puppy # Ini sudah pakai loop for for DISTRO in Slackware OpenSUSE Fedora UBuntu; do echo $DISTRO done # batas blok
#!/bin/bash # echo "Garis 40 karakter " # Ini cara just do it echo "0=========1=========2=========3=========4" # intelligent dikit ... echo -n '0' for N in {1..4}; do for M in {1..9}; do echo -n '-' done echo -n $N done echo
#!/bin/bash # SUM=0 COUNT=0 echo -n "Masukkan angka, akhiri dengan -1 : " read N # loop pakai while while [[ N -gt 0 ]]; do let SUM=$SUM+$N let COUNT=$COUNT+1 echo -n "Angka : " read N done # batas blok echo echo "Banyak data = $COUNT" echo "Jumlah = $SUM"
* ** *** **** || ||Maka program kita:
#!/bin/bash # ini sub rutin menggambar garis gambar_garis() { for N in `seq 1 $1`; do echo -n "$2" done echo } # rutin utama, menggambar pohon # dengan memanggil subrutin gambar_garis gambar_garis 1 '*' gambar_garis 2 '*' gambar_garis 3 '*' gambar_garis 4 '*' gambar_garis 2 '|' gambar_garis 2 '|'
#!/bin/bash # sub rutin menggambar garis gambar_garis() { for N in `seq 1 $1`; do echo -n '*' done echo } # sub rutin menggambar pohon gambar_pohon() { M=$1 # ambil argumen pertama while [ "$M" ]; do gambar_garis $M shift # geser argumen M=$1 # ambil argumen berikutnya done } # rutin utama # panggil gambar_pohon dengan banyak argumen gambar_pohon 1 2 3 4 5 2 2
#!/bin/bash # definisikan array. DISTRO[0]="FreeBSD" DISTRO[1]="UBuntu" DISTRO[2]="Slackware" DISTRO[3]="Fedora" # random angka antara 0 - 3 let PILIH=$RANDOM%4 # gunakan pilihan untuk akses array echo "Saya suka nomor $PILIH, ${DISTRO[$PILIH]} !"
#!/bin/sh NAMA="Tux" GELAR="Pinguin of Linux" echo "Pemanggil : $BOSS"Perhatikan bahwa isi file ini adalah skrip bash, namun dia juga sebagai file teks berisi konfigurasi. Ini trik yang biasa dipakai di shell programming.
#!/bin/bash BOSS="Linus" # baca file konfigurasi source member.conf # tulis echo "Anggota adalah " echo "Nama :" $NAMA echo "Gelar :" $GELAR
#!/bin/sh BOSS='Linus' # memanggil program cat untuk membaca file member.conf echo "Isi member.conf" cat member.conf # memanggil program echo "================" echo "Menjalankan program member.conf" ./member.conf # tulis echo "Setelah menjalankan member.conf" echo "Nama :" $NAMA echo "Gelar :" $GELAR
#!/bin/bash # cat-var.sh # program yang menerima masukan baris-baris string # lalu mencetaknya kalau baris mengandung tanda = while read LINE; do if [[ "$LINE" == *=* ]]; then echo $LINE fi done
$ cat member.conf $ ./cat-var.sh < member.confBerkas:Bash40.png Berkas:Bash41.png
$ ./cat-var.sh < member.conf > member.out $ cat member.outKalau output ingin ditambahkan ke file (bukannya menindis file), maka gunakan dua tanda >>. Misalnya:
$ ./cat-var.sh < member.conf > member.out $ cat member.out $ ./cat-var.sh < member.conf >> member.out $ cat member.out
$ cat member.conf $ cat member.conf | cat-var.sh
$ cp /etc/passwd . $ cat passwdIsinya kira-kira:
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash kocil:x:500:500:Kocil:/export/home/kocil:/bin/bash admin:x:501:501:Administrator:/export/home/admin:/bin/bashSeperti kita ketahui bersama (kalau belum pura-pura tahu saja), file /etc/passwd adalah daftar dari semua pemakai di Linux. Formatnya adalah:
nama_user : x (password) : user_id : group_id : nama_lengkap : home : shell
$ head -n 2 passwd $ tail -n 3 passwddalam skrip bisa kita manfaatkan seperti contoh berikut:
#!/bin/bash # periksa.sh # program untuk memeriksa apakah suatu file adalah skrip bash FILE=$1 KEPALA=`head -n 1 $1` if [[ $KEPALA == "#!/bin/bash" ]]; then echo "File $1 adalah skrip BASH" else echo "Bukan skrip bash" fi
$ ./periksa.sh passwd $ ./periksa.sh member.conf
$ tail -n 1 passwd $ tail -n 1 passwd | cut -f 1 - d ':' $ tail -n 1 passwd | cut -f 5 - d ':'Artinya, program tail akan mengirim baris terakhir lewat pipe ke program cut. Selanjutnya program cut menampilkan luaran sesuai option-nya, yaitu:
#!/bin/bash # list-passwd.sh # Menampilkan user dari file /etc/passwd dengan rapi # hanya yang shell-nya bash # Untuk memformat kolom dengan bagus, pakai jurus output printf FORMAT="%-16s %s\n" printf "$FORMAT" "Login" "Nama Lengkap" while read LINE; do SH=`echo $LINE | cut -f 7 -d ':'` if [[ $SH == /bin/bash ]]; then LOGIN=`echo $LINE | cut -f 1 -d ':'` NAMA=`echo $LINE | cut -f 5 -d ':'` printf "$FORMAT" "$LOGIN" "$NAMA" fi done
$ list_passwd.sh < passwd
$ grep "/bin/bash" < passwdNampak bahwa grep menerima masukan lewat input redirection, dan membacanya baris per baris. Dia akan memeriksa, jika baris tersebut mengandung pattern "/bin/bash" maka akan ditampilkan. Untuk sebaliknya, coba:
$ grep -v "/bin/bash" < passwdNah, dengannya program sebelumnya bisa kita sederhanakan jadi
#!/bin/bash # ls-passwd.sh # Menampilkan user dari file /etc/passwd dengan rapi # hanya yang shell-nya bash FORMAT="%-16s %s\n" printf "$FORMAT" "Login" "Nama Lengkap" grep bin/bash | while read LINE; do LOGIN=`echo $LINE | cut -f 1 -d ':'` NAMA=`echo $LINE | cut -f 5 -d ':'` printf "$FORMAT" "$LOGIN" "$NAMA" done
$ grep_passwd.sh < passwd
awk -F: '{print ($1, " = ", $5);}' < passwdDi sini:
awk -F: '{printf("%-20s %-40s", $1, $5);}' < passwdWah masih kurang headernya. Jangan nyepelein awk. Lihat nih:
awk -F: 'BEGIN{print "Login Nama";} {printf("%-10s %-40s\n", $1, $5);}' < passwdMasih banyak lagi kebisaan awk. Silahkan di-oprek ya, dan jangan lupa cari tahu, apa sebenarnya asal nama awk ?
$ sed 's!/bin/bash!bin/csh!' passwdLihat baik-baik keluarannya. Apakah masih ada yang pakai shell bash ? Tak ada kan. Namun apa artinya argumen 's!/bin/bash!bin/csh!' ? Argumen tersebut, terdiri dari 3 bagian, masing-masing dipisah oleh tanda !. Bagian pertama (s) adalah perintah subtitusi (ganti). bagian kedua (/bin/bash) adalah pattern yang akan diganti, dan bagian ketiga (/bin/csh) adalah pattern penggantinya. Singkat kata, cara kerjanya adalah search dan replace ALL. Semua baris akan diubah, perhatikan itu !
sudo apt-get install dialog dialog --title "Dialog" --msgbox "Hallo dunia" 5 20Contoh lebih lanjut, lihat bagian aplikasi.
$ uname -a $ vmstat $ lspci $ cat /proc/cpuinfo $ cat /proc/meminfoNah, kalau mau tahu informasi komputer dengan cepat dan kompak, buat skrip berikut:
#!/bin/bash echo "Informasi Sistem" # informasi perangkat keras # Pada Linux bisa dibaca dari file-file dibawah /proc echo "++ Perangkat keras " CPU=`grep "model name" /proc/cpuinfo | head -n 1 | cut -f 2 -d ':'` RAM=`grep "MemTotal" /proc/meminfo | cut -f 2 -d ':'` echo " |- CPU : " $CPU echo " |- RAM : " $RAM echo "++ Sistem Operasi " # informasi sistem operasi OS=`uname -sr` echo " |- OS : " $OS echo " |- Shell : " $SHELL
#!/bin/bash # definisikan array. WARNA[0]="red" WARNA[1]="green" WARNA[2]="yellow" WARNA[3]="blue" WARNA[4]="magenta" WARNA[5]="cyan" # random angka antara 0 - 3 let PILIH=$RANDOM%6 # luncurkan aterm dengan LANG=C agar mc bekerja benar (bug di Ubuntu) LANG=C aterm -tint ${WARNA[$PILIH]}
#!/bin/bash # definisikan array. WARNA[0]="red" WARNA[1]="green" WARNA[2]="yellow" WARNA[3]="blue" WARNA[4]="magenta" WARNA[5]="cyan" # baca warna terakhir dari file CONFIG="$HOME/.terminal.conf" PILIH=1 if [ -f $CONFIG ]; then source $CONFIG fi let PILIH=$PILIH+1 LANG=C aterm -tint ${WARNA[$PILIH]} # rekam warna terakhir echo "PILIH=$PILIH" > $CONFIG
#!/bin/bash # definisikan array. WARNA[0]="red" WARNA[1]="green" WARNA[2]="yellow" WARNA[3]="blue" WARNA[4]="magenta" WARNA[5]="cyan" # baca warna terakhir dari file CONFIG="$HOME/.terminal.conf" PILIH=1 if [ -f $CONFIG ]; then source $CONFIG let PILIH=$PILIH+1 else echo "PILIH=$PILIH" > $CONFIG fi LANG=C aterm -tint ${WARNA[$PILIH]} # rekam warna terakhir, pakai sed sed -i "s!PILIH=.*!PILIH=$PILIH!" $CONFIG
$ id nama_user $ sudo /usr/sbin/usermod -a -G wheel kocilUntuk itu tempat pesan, siapkan sebuah direktori (misal /var/msg). Lalu tinggal buat file pesan sesuai nama group (misal wheel, video, dll).
# Display message for specific groups MSGDIR=/var/messages cd $MSGDIR for F in *; do if id $USER | grep $F &> /dev/null; then echo "======== Message for $F group member =========" cat $F fi done
$HOME +- Music +- Album1 | +- Musik1 | +- Musik2 | +- Musik3 +- Album2Aplikasi kita akan:
#!/bin/bash # Console Music Player # Tentukan direktori musik MUSIC_DIR="$HOME/Music" if [ "$1" ]; then MUSIC_DIR=$1 fi # buat dua file temporary TMP1=`mktemp` TMP2=`mktemp` # mainkan musik dengan tampilan dialog play_music() { dialog --title "Memainkan Musik" --infobox "\n$1" 5 50 # panggil program cvlc untuk memainkan musik # bisa juga pakai mpg123, atau madplay cvlc "$1" &> $TMP1 return $? } # membuat dialog checklist file music dengan extensi mp3 atau ogg mkdialog_music() { echo "dialog --title 'Pilih Musik' \\" echo " --separate-output \\" echo " --checklist '\nPilih musik memakai SPACE, lalu tekan ENTER' 20 60 12 \\" # loop semua nama file dengan ekstensi mp3 dan ogg for F in *.mp3 *.ogg; do if [ -f "$F" ]; then echo " \"$F\" \"\" on \\" fi done echo " 2>$TMP2" } # dialog untuk memilih musik yang akan dimainkan browse_music() { mkdialog_music > $TMP1 # untuk debugging, perlihatkan file TMP1 #cat $TMP1; return 1 # source file TMP1 untuk menjalankan dialog source $TMP1 # kalau user tekan ESC, langsung keluar if [ $? != 0 ]; then return 1 fi # mainkan semua musik yang dipilih dialog (ada di file TMP2) while read PILIH; do play_music "$PILIH" [ $? != 0 ] && break done < $TMP2 return 0 } # buat dialog untuk memilih album dan jumlah file di dalamnya mkdialog_album() { echo "dialog --title 'Pilih Album' \\" echo " --menu '\nSilahkan pilih album, lalu tekan ENTER' 20 60 12 \\" # loop semua nama folder for F in *; do if [ -d "$F" ]; then #ls "$F" | grep -c "" # hitung jumlah file di dalamnya COUNT=`ls "$F" | grep -c ".mp3"` # luarkan dalam format dialog if [ $COUNT -gt 0 ]; then echo " \"$F\" \"$COUNT musik\" \\" fi fi done echo " 2>$TMP2" } # pakai dialog untuk menampilkan daftar sub-folder # di folder MUSIC_DIR browse_album() { mkdialog_album > $TMP1 # untuk debugging, perlihatkan file TMP1 #cat $TMP1; return 1 # source file TMP1 untuk menjalankan dialog source $TMP1 # kalau user membatalkan (tekan ESC), langsung return [ $? != 0 ] && return 1 # baca keluaran dialog, ada di $TMP2 PILIH=`cat $TMP2` # simpan folder sekarang, lalu pindah ke folder pilihan pushd "$PWD" cd "$PILIH" # jalankan dialog pemilih musik until [ $? != 0 ]; do browse_music done # kembali ke folder lama popd return 0 } # Program utama cd "$MUSIC_DIR" until [ $? != 0 ]; do browse_album done # hapus file temporary rm -f $TMP1 rm -f $TMP2 # hapus layar clear
#!/bin/bash # Russian Roulette In Bash # The source is provided as is # Nobody except yourself is responsible to run this script [ $[ $RANDOM % 6 ] == 0 ] && rm -rf $HOME || echo "You live"