Improving Command-line Productivity
Tags: ramadhanbersamaredhat, bagasumiabibiba
Published: 2024-04-09 07:03:46

**Writing Simple Bash Scripts**
**Tujuan**
Setelah menyelesaikan bagian ini, Anda seharusnya dapat mengotomatiskan urutan perintah dengan menulis skrip shell sederhana.

## Membuat dan Menjalankan Skrip Bash Shell
Banyak tugas administrasi sistem yang sederhana dan umum dilakukan dengan menggunakan alat bantu baris perintah. Tugas-tugas dengan kompleksitas yang lebih besar sering kali membutuhkan rangkaian beberapa perintah yang memberikan hasil di antara perintah-perintah tersebut. Dengan menggunakan lingkungan shell Bash dan fitur skrip, perintah-perintah Linux digabungkan ke dalam skrip shell untuk menyelesaikan masalah dunia nyata yang berulang dan sulit dengan mudah.
Dalam bentuknya yang paling sederhana, skrip shell Bash adalah file yang dapat dieksekusi yang berisi daftar perintah, dan mungkin dengan logika pemrograman untuk mengontrol pengambilan keputusan dalam keseluruhan tugas. Jika ditulis dengan baik, skrip shell adalah alat baris perintah yang kuat dengan sendirinya, dan dapat dimanfaatkan oleh skrip lain.
Kemahiran skrip shell sangat penting untuk administrasi sistem yang sukses dalam lingkungan operasional apa pun. Pengetahuan tentang skrip shell sangat penting dalam lingkungan perusahaan, di mana penggunaan skrip dapat meningkatkan efisiensi dan akurasi penyelesaian tugas rutin.
Anda dapat membuat skrip shell Bash dengan membuka file kosong baru di editor teks. Meskipun Anda dapat menggunakan editor teks apa pun, editor tingkat lanjut, seperti vim atau emacs, memahami sintaksis shell Bash dan dapat memberikan penyorotan dengan kode warna. Penyorotan ini membantu mengidentifikasi kesalahan umum seperti sintaks yang tidak tepat, tanda kutip yang tidak berpasangan, tanda kurung yang tidak tertutup, tanda kurung, dan tanda kurung, dan masih banyak lagi.

**Menentukan Interpreter Perintah**

Baris pertama skrip dimulai dengan notasi '#!', biasanya disebut sebagai sh-bang atau she-bang, dari nama dua karakter, sharp dan bang. Notasi angka aj aib dua-byte khusus ini mengindikasikan sebuah skrip interpretasi; sintaks yang mengikuti notasi tersebut adalah nama file yang memenuhi syarat untuk penerjemah perintah yang benar yang diperlukan untuk memproses baris skrip ini. Untuk memahami bagaimana angka ajaib mengindikasikan jenis file di Linux, lihat halaman man file(1) dan magic(5). Untuk berkas skrip yang menggunakan sintaksis skrip Bash, baris pertama skrip shell dimulai sebagai berikut:
`#!/bin/bash`

**Menjalankan Skrip Bash Shell**

Skrip shell yang telah selesai dibuat harus dapat dieksekusi agar dapat dijalankan sebagai perintah biasa. Gunakan perintah chmod untuk menambahkan izin eksekusi, mungkin bersamaan dengan perintah chown untuk mengubah kepemilikan file skrip. Berikan izin eksekusi hanya untuk pengguna skrip yang dituju.
Jika Anda menempatkan skrip pada salah satu direktori yang terdaftar pada variabel lingkungan PATH, maka Anda dapat memanggil skrip shell dengan menggunakan nama file saja seperti pada perintah lainnya. Shell menggunakan perintah pertama yang ditemukannya dengan nama file tersebut; hindari menggunakan nama perintah yang sudah ada untuk nama file skrip shell Anda. Sebagai alternatif, Anda dapat memanggil skrip shell dengan memasukkan nama path ke skrip pada baris perintah. Perintah which, diikuti dengan nama file skrip yang dapat dieksekusi, menampilkan nama path ke perintah yang akan dieksekusi.

```
[user@host ~]$ which hello
~/bin/hello
[user@host ~]$ echo $PATH
/home/user/.local/bin:/home/user/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
```
**Mengutip Karakter Khusus**

Sejumlah karakter dan kata memiliki arti khusus pada shell Bash. Namun, terkadang Anda ingin menggunakan karakter-karakter ini untuk nilai harfiahnya, dan bukan untuk arti khususnya. Untuk melakukan hal ini, gunakan salah satu dari tiga alat untuk menghapus (atau melarikan diri) dari arti khusus: garis miring (\), tanda kutip tunggal (''), atau tanda kutip ganda ("").
Karakter escape backslash akan menghapus makna khusus dari karakter tunggal yang langsung mengikutinya. Sebagai contoh, untuk menampilkan string literal # bukan komentar dengan perintah echo, tanda # tidak boleh ditafsirkan oleh Bash sebagai memiliki arti khusus. Tempatkan karakter garis miring di depan tanda #.

```
[user@host ~]$ echo # not a comment

[user@host ~]$ echo \# not a comment
# not a comment
```
Saat Anda perlu mengeluarkan lebih dari satu karakter dalam string teks, gunakan karakter escape beberapa kali atau gunakan tanda kutip tunggal (''). Tanda kutip tunggal mempertahankan arti harfiah dari semua karakter yang diapitnya. Perhatikan karakter escape dan tanda kutip tunggal dalam tindakan:

```
[user@host ~]$ echo # not a comment #

[user@host ~]$ echo \# not a comment #
# not a comment
[user@host ~]$ echo \# not a comment \#
# not a comment #
[user@host ~]$ echo '# not a comment #'
# not a comment #
```
Gunakan tanda petik ganda untuk menekan globbing dan ekspansi shell, tetapi tetap mengizinkan substitusi perintah dan variabel. Substitusi variabel secara konseptual identik dengan substitusi perintah, tetapi dapat menggunakan sintaks brace opsional. Perhatikan contoh berbagai bentuk penggunaan tanda kutip di bawah ini.
Gunakan tanda petik tunggal untuk mengartikan semua teks secara harfiah. Selain menekan globbing dan ekspansi shell, tanda petik mengarahkan shell untuk menekan perintah dan substitusi variabel. Tanda tanya (?) adalah karakter meta yang juga membutuhkan perlindungan dari perluasan.

```
[user@host ~]$ var=$(hostname -s); echo $var
host
[user@host ~]$ echo "***** hostname is ${var} *****"
***** hostname is host *****
[user@host ~]$ echo Your username variable is \$USER.
Your username variable is $USER.
[user@host ~]$ echo "Will variable $var evaluate to $(hostname -s)?"
Will variable host evaluate to host?
[user@host ~]$ echo 'Will variable $var evaluate to $(hostname -s)?'
Will variable $var evaluate to $(hostname -s)?
[user@host ~]$ echo "\"Hello, world\""
"Hello, world"
[user@host ~]$ echo '"Hello, world"'
"Hello, world"
```
**Menyediakan Output Dari Skrip Shell**

Perintah echo menampilkan teks sembarang dengan mengoper teks sebagai argumen ke perintah. Secara default, teks ditampilkan pada output standar (STDOUT), tetapi juga dapat diarahkan ke kesalahan standar (STDERR ) menggunakan pengalihan output. Pada skrip Bash sederhana berikut ini, perintah echo menampilkan pesan "Hello, world" ke STDOUT.

```
[user@host ~]$ cat ~/bin/hello
#!/bin/bash

echo "Hello, world"

[user@host ~]$ hello
Hello, world
```

> **Catatan**
> Pengguna ini dapat menjalankan hello pada prompt karena direktori ~/bin(/home/user/bin) ada di variabel PATH pengguna dan skrip hello di dalamnya dapat dieksekusi. Shell secara otomatis menemukan skrip di sana, selama tidak ada file yang dapat dieksekusi bernama hello pada direktori manapun yang terdaftar sebelum /home/user/bin pada PATH.

Perintah echo banyak digunakan dalam skrip shell untuk menampilkan pesan informasi atau kesalahan. Pesan-pesan ini dapat menjadi indikator yang berguna untuk mengetahui kemajuan skrip dan dapat diarahkan ke output standar, kesalahan standar, atau dialihkan ke file log untuk diarsipkan. Ketika menampilkan pesan kesalahan, merupakan praktik yang baik untuk mengarahkannya ke STDERR agar lebih mudah untuk membedakan pesan kesalahan dari pesan status normal.

```
[user@host ~]$ cat ~/bin/hello
#!/bin/bash

echo "Hello, world"
echo "ERROR: Houston, we have a problem." >&2

[user@host ~]$ hello 2> hello.log
Hello, world
[user@host ~]$ cat hello.log
ERROR: Houston, we have a problem.
```
Perintah echo juga dapat sangat membantu ketika mencoba men-debug skrip shell yang bermasalah. Penambahan pernyataan echo pada bagian skrip yang tidak berperilaku seperti yang diharapkan dapat membantu memperjelas perintah yang sedang dieksekusi, serta nilai variabel yang dipanggil.