Chapter 1:Improving Command-line Productivity
Published: 2022-10-26 05:25:14

**Membuat dan Menjelaskan Skrip Bash Shell**
  Skrip Shell Bash adalah file yang dapat dieksekusi yang berisi daftar perintah atau logika pemrogaman dengan tujuan untuk mengontrol pengambilan keputusan dalam keseluruhan tugas.
  Cara membuat Skrip Shell Bash dengan membuka file kosong baru di editor teks,yang bisa menggunakan perintah seperti vim atau emacs,memhami sintaksis Shell Bash dan dapat memberikan color-coded penyorotan yang membantu mengidentifikasi kesalahan umum.

**Menentukan Interpreter Perintah**
  Baris pertama diawali dengan notasi '#!' yang disebut sh-bang atau she-bang.Contoh baris pertama Skrip Bash Shell dibawah ini:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g6pmul9logw5ru3w4c57.png)


**Menjalankan Skrip Bash Shell 
   Dalam menjalankan Skrip Bash Shell bisa menggunakan perintah 'chmod' untuk menambahkan izin eksekusi,sedangkan perintah 'chown' untuk mengubah kepemilikan file skrip,perintah 'which' dikuti dengan nama file dari skrip yang dapat dieksekusi,menampilkan nama path ke perintah yang akan dieksekusi,dan perintah 'echo' untuk menampilkan pesan informasi atau kesalahan sehingga bisa membantu ketika men-debuq skrip shell yang bermasalah.
   Apabila anda menempatkan skrip di salah satu direktori yang terdaftar di PATH variabel lingkungan shell,maka anda dapat menjalankan skrip shell menggunakan nama file saja seperti dengan perintah lainnya.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ix5n295jeahklxnf26tb.png)

**Mengutip Karakter Khusus**
   Karakter backslash escape menghilangkan arti khusus dari karakter tunggal mengikutinya.Contoh:untuk menampilkan string literal # not a comment bisa dengan perintah echo.Tempatkan karakter \ di depan tanda #.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lrbxbv9edb024tweorh5.png)
   Karakter escape beberapa kali atau gunakan tanda kutip tunggal(") berfungsi untuk mempertahankan arti literal dari semua karakter yang dilampirkan.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wsos4uyiy2gp9n4j4tnz.png)
   Karakter escape tanda kutip ganda(") berfungsi untuk menekan globbing dan ekspansi shell.Karakter tanda tanya(?) yang disebut meta-charcter yang juga membutuhkan perlindungan dari ekspansi.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2wxpy9rx90r11vmzgiki.png)

**Menjalankan perintah Lebih Efisien Menggunakan Loop**
   Loop adalah bagian dari kode yang ingin Anda jalankan berulang kali.Daripada mengetikkan kumpulan instruksi yang sama ke dalam skrip Anda, berulang kali, sebuah loop akan mengulangi satu bagian kode berulang-ulang untuk Anda.The for loop adalah salah satu dari beberapa kontruksi perulangan shell yang ditawarkan oleh Bash,dan dapat digunakan untuk interasi tugas.
 Memproses Item dari Baris Perintah 
  Kontruksi for loop Bash menggunakan sintaks:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/adhx2jd0kkf0g5lxrwlv.png)
  Setiap string dalam daftar disimpan sementara sebagai nilai VARIABEL,sementara for loop mengeksekusi blok perintah yang terkandung dalam kontruksinya.Penamaan variabel bersifat arbitrer.Daftar string yang dimasukkan langsung oleh pengguna,atau dihasilkan dari berbagai jenis ekspansi shell,seperti variabel,kurung awal,atau ekspansi nama file,atau substitusi perintah.Contoh menggunakan string yang dapat diberikan untuk for diikuti oleh loop.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3jmrq6tv1o4l7nczou4j.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b2ecuqoc8728dzujwzm8.png)

**Menggunakan Kode Keluar Dalam Skrip**
  Perintah keluar dapat dieksekusi dengan argumen integer opsional antara 0 dan 255,yang mewakili kode keluar.Kode keluar adalah kode yang dikembalikan setelah proses selesai.Semua nilai bukan nol lainnya menunjukkan kode keluar kesalahan tetapi anda bisa menggunakan nilai bukan nol yang berbeda untuk membedakan antara berbagai jenis kesalahan yang ditemui.Contohnya:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4fsa4wb8r04cpvn9lztm.png)
Jika perintah **keluar** dipanggil tanpa argumen,maka skrip keluar dan melewati status keluar dari perintah terakhir yang dieksekusi ke proses induk.

**Menguji Input Skrip**
  Pemeriksaan integritas dapat dilakukan dengan menggunakan perintah **test bash**.Pengujian dilakukan dengan menggunakan berbagai operator.Operator digunakan untuk menentukan apakah suatu bilangan lebih besar dari,lebih besar atau sama dengan,kurang dari,kurang dari atau sama dengan,atau sama dengan bilangan lain.Operator juga dapat digunakan untuk mengevaluasi apakah suatu variabel memiliki nilai atau tidak.Contoh menggunakan perintah **test**:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vhyn6n2rzczcs3l9ypjf.png)
  Pengujian dapat dilakukan dengan menggunakan sintaks perintah Bash test,[<TESTEXPRESSION>].Contoh menunjukkan penggunaan sintaks  perintah pengujian Bash dan operator perbandingan numerik Bash.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/55in02vuemh015sfax2f.png)
Contoh menunjukkan penggunaan operator perbandingan string bash.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a5f9o5l1ena7vddsli63.png)
Contoh menunjukkan penggunaan operator unary string Bash.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/omdg903obe28d2lx4e27.png)
 Karakter spasi di dalam tanda kurung() uji adalah wajib,karena karakter tersebut memisahkan kata dan elemen dalam ekspresi pengujian.Karakter kurung siku kiri([)merupakan bawaan untuk perintah pengujian.

  Struktur Bersyarat
**Menggunakan konstruk if/then**
struktur kondisional paling sederhana di Bash adalah kontruksi oif/then.Contoh penggunaan if/then.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ob1l2a2n8vki4dfajfo0.png)
Dengan kontruksi ini,jika kondisi tertentu terpenuhi,satu atua lebih tindakan diambil.Jika kondisi yang diberikan tidak terpenuhi,maka tidak akan ada tindakan yang diambil.Pernyataan if diakhir menutup if/then konstruk.Contoh menunjukkan penggunaan if/then konstruksi untuk memulai psacct layanan jika tidak aktif.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a8pw5atcruix9m6j37eh.png)
**Menggunakan konstruksi if/then/else**
konstruksi if/then dapat diperluas lebih lanjut sehingga rangkaian tindakan yang berbeda dapat diambil tergantung pada apakah suatu kondisi terpenuhi.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n2z1xqq8x9plfpeylzja.png)
 Kode yang menunjukkan penggunaan if/then/else pernyataan untuk memulai psacct layanan jika tidak aktif dan menghenntikan jika aktif.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t60qdo9kmgl0ymwwut3t.png)
**Menggunakan if/then/elif/then/elsekonstruk **
penggunaan if.then/elsekonstruk untuk menguji lebih dari satu kondisi,mengeksekusi serangkaian tindakan yang berbeda ketika kondisi tersebut terpenuhi.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g9l46aybwqwmxei6hw94.png)
Penggunaan if/then/elif/then/else pernyataan untuk menjalankan klien **mysql**mariadb jika layanan aktif,menjalankan klien **psql** jika postgresql layanan aktif,atau menjalankan klien **sqlite3**mariadb jika postgresql layanan tidak aktif.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g01krvm4lsxplt1mnq0y.png)

**Mencocokkan Teks dalam Output Perintah dengan Ekspresi Reguler**
  Ekspresi reguler adalah bahasa mereka sendiri,sehingga memiliki sinteks dan aturan sendiri.Ekspresi reguler paling sederhana adalah pencocokan tepat.Pencocokan tepat adalah ketika karakter dalam ekspresi reguler cocok dengan jenis dan urutan dalam data yang sedang dicari.Contoh dibawah ini:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mnuvy6uw4cylafcvlfau.png)
  EKSPRESI REGULER
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qe09gq8fgunvm1dxpt0b.png)

**Mencocokan Ekspresi Reguler dengan Grep**
  Perintah menggunakan grep untuk mengisolasi data yang cocok.Contoh menggunakan perintah grep
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5f0s0alaas4ydd44dpu5.png)
  Disarankan untuk menggunakan tanda kutip tunggal untuk merangkum ekspresi reguler karena sering mengandung metakarakter shell (seperti $, *, dan {}). Ini memastikan bahwa karakter ditafsirkan oleh grep dan bukan oleh shell.
  Opsi grep digunakan untuk menyesuaikan cara menggunakan ekspresi reguler yang disediakan dengan data.
 Tabel 1.2.Opsi grep umum
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g9fymdjg14gxpkm91elc.png)
Contoh-contoh menggunakan perintah grep
  Ekspresi reguler peka huruf besar/kecil secara default. Gunakan opsi dengan grep untuk menjalankan pencarian yang tidak peka huruf besar/kecil. Contoh berikut mencari pola .-iserverroot.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v9aoi6d76gq1kf6yxvn0.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ewb7n4yq8xr927gzcayc.png)
  Menggunakan -vopsi untuk mencocokan baris yang dimulai dengan # atau ; (karakter khas yang menunjukkan garis akan ditafsirkan sebagai komentar).Baris-baris tersebut kemudian dihilangkan.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oi1yvymi167liep178a8.png)
  Menggunakan perintsh grep dengan -eopsi untuk mencari lebih dari satu ekspresi reguler sekaligus.Contoh kombinasi menggunakan less dan grep,menempatkan semua kejadian,dan dalam file log.pam_unixuser rootAccepted publickey/var/log/secure
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y630frhsuyxt8cgrb998.png)
 Menggunakan perintah vim atau kurang,dengan menggunakan karakter garis miring(/) dan ketik pola yang akan ditemukan.Kemudian tekan **enter** untuk memulai pencarian.Tekan **N** untuk menemukan kecocokan berikutnnya.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pvqokwimt05dmoxjwh4w.png)