Pengantar Bash Shell

Halo semuanya. Ini adalah terjemahan dari Buku Persiapan Ujian RedHat RHCE. Menurut pendapat saya, ini sangat mudah diakses tentang dasar-dasar bash.

Script shell adalah ilmu itu sendiri. Tanpa merinci semua yang terjadi "di bawah tenda", Anda akan belajar cara menggunakan elemen dasar untuk menulis skrip Anda sendiri, dan menganalisis apa yang terjadi pada skrip shell pihak ketiga.



Memahami elemen dasar skrip shell


Bahkan, skrip shell adalah daftar perintah yang dieksekusi secara berurutan, serta beberapa logika yang memungkinkan kode untuk dieksekusi hanya dalam kondisi tertentu.

Untuk memahami skrip shell kompleks, Anda disarankan mulai dengan skrip dasar.

Berikut ini adalah skrip yang sangat sederhana:

#!/bin/bash # # #This is a script that greets the world # Usage: ./hello clear echo hello world exit 0 

Ini berisi beberapa elemen yang harus digunakan dalam semua skrip. Sebagai permulaan, ada shebang - ini adalah baris #! / Bin / bash. Ketika skrip diluncurkan dari shell induk, skrip ini membuka subkulit di mana perintah yang ditentukan dalam skrip dieksekusi.

Perintah-perintah ini dapat diartikan dengan berbagai cara. Untuk memahami bagaimana mereka harus ditafsirkan, shebang digunakan. Pada contoh di atas, shebang memperjelas bahwa skrip harus dijalankan oleh bash shell.

Kerang lain juga dapat diindikasikan. Misalnya, jika skrip Anda berisi kode Perl, shebang seharusnya #! / Usr / bin / perl. Memulai naskah dengan shebang adalah praktik yang baik; jika dihilangkan, kode skrip akan dieksekusi oleh shell yang sama yang digunakan untuk menjalankan skrip.

Segera setelah shebang, ada bagian yang menjelaskan tentang naskahnya. Beberapa baris komentar di awal setiap skenario adalah ide yang bagus. Dalam sebuah skrip pendek, sering kali jelas apa fungsinya, tetapi karena skrip semakin panjang, dan semakin banyak orang terlibat dalam menulis dan mendukungnya, menjadi kurang jelas apa yang ingin dilakukan penulis.

Untuk menghindari situasi ini, pastikan untuk menambahkan baris komentar yang dimulai dengan setiap karakter #. Komentar bisa tidak hanya di baris pertama, tetapi juga di awal setiap ayat naskah. Ini pasti akan membantu jika Anda membaca skrip Anda dalam beberapa bulan!

Anda juga dapat berkomentar tidak hanya pada subbagian, tetapi juga pada setiap baris.

Apa pun posisi yang digunakan, semuanya dari karakter # hingga akhir baris adalah komentar.

Setelah blok komentar, badan skrip ditemukan. Dalam contoh di atas, ini adalah beberapa perintah yang dijalankan secara berurutan. Tubuh skrip shell dapat meningkat saat berkembang.

Di akhir skrip, saya menyertakan pernyataan keluar 0 . Pernyataan keluar memberi tahu induk shell apakah skrip berhasil. Keadaan keluar dari perintah terakhir dalam skrip adalah keadaan keluar dari skrip itu sendiri, kecuali keluar 0 digunakan pada akhir skrip.

Sangat berguna untuk mengetahui bahwa Anda dapat bekerja dengan keluar untuk memberi tahu induk shell bagaimana keadaannya.
Diperkenalkan dalam shell induk, $ echo? memungkinkan Anda untuk menanyakan status keluar dari skrip yang terakhir berjalan.
Setelah membuat skrip, pastikan skrip dapat dieksekusi. Cara paling umum untuk melakukan ini adalah menerapkan bit run untuk itu. Jadi, jika nama file skrip adalah halo, gunakan perintah chmod + x ./hello untuk membuatnya dapat dieksekusi.

Script juga dapat dieksekusi sebagai argumen ke perintah bash. Dalam hal ini, masukkan bash ./hello untuk menjalankan skrip halo. Jika skrip dijalankan sebagai argumen ke perintah bash, file skrip tidak harus dapat dieksekusi.

Bahkan, Anda dapat menyimpan skrip di mana saja, tetapi jika Anda akan menyimpannya di direktori yang tidak termasuk dalam variabel $ PATH, Anda harus menjalankannya dengan ./ di depan nama skrip.

Ketik ./hello untuk menjalankan skrip, atau letakkan di direktori standar yang termasuk dalam variabel $ PATH, misalnya, / usr / local / bin.

Anda juga dapat menempatkan skrip di direktori / bin, setelah itu cukup masukkan nama file di mana saja dalam sistem file dan skrip akan dijalankan.

Contoh

Menggunakan vi / bin / datetime, buat file bernama datetime di direktori / bin. Rekatkan konten ini ke file yang dibuat:

 #!/bin/bash #    .     ,      date who 

Setelah menyimpan file, masukkan chmod + x / bin / datetime untuk memberikan izin file untuk dieksekusi. Misalnya, ubah ke direktori home Anda menggunakan perintah cd ~ dan cukup masukkan datetime .

Pergi, misalnya, ke direktori cd ~ home dan cukup masukkan datetime.

 [root@localhost ~]# datetime Sat Sep 28 00:33:41 EDT 2019 root tty1 2019-09-25 20:28 root pts/0 2019-09-27 20:07 (comp.corp.domain.ru) 

Menggunakan Variabel dan Input


skrip bash lebih dari sekadar daftar perintah yang dieksekusi secara berurutan. Salah satu hal yang menyenangkan tentang skrip adalah mereka dapat bekerja dengan variabel dan input untuk membuat skrip fleksibel. Di bagian ini Anda akan belajar cara bekerja dengannya.

Menggunakan parameter posisi


Saat menjalankan skrip, Anda dapat menggunakan argumen. Hanya argumen yang Anda letakkan di belakang perintah skrip. Argumen dapat digunakan untuk membuat skrip lebih fleksibel. Ambil perintah useradd lisa . Dalam contoh ini, perintahnya adalah useradd , dan argumennya, lisa , menunjukkan apa yang perlu dilakukan.

Sebagai hasil dari perintah seperti itu, seorang pengguna bernama lisa harus dibuat.

Dalam skrip, argumen pertama adalah $ 1 , argumen kedua adalah $ 2, dan seterusnya. Daftar 1 menunjukkan bagaimana argumen dapat digunakan. Coba jalankan kode ini dengan menentukan nama pengguna sebagai parameter.

Listing 1

 #!/bin/bash # run this script with a few arguments echo The first argument is $1 echo The second argument is $2 echo The third argument is $3 

Parameter berarti entri data sebelum menjalankan skrip. Dalam hal ini, saya menetapkan lisa , lori dan bob sebagai parameter setelah nama skrip argumen:

 [root@server1 ~]# ./argument lisa lori bob The first argument is lisa The second argument is lori The third argument is bob [root@server1 ~]# 

Jika Anda mencoba menjalankan kode sampel, Anda mungkin memperhatikan bahwa isinya tidak sempurna. Jika Anda menggunakan tiga argumen saat menjalankan skrip dari Listing 1, itu akan berfungsi dengan baik. Jika Anda hanya menggunakan dua argumen, argumen ketiga adalah output tanpa nilai $ 3.

Jika Anda menggunakan empat argumen, nilai keempat (yang akan disimpan dalam $ 4) tidak akan pernah ditampilkan. Jadi, jika Anda ingin menggunakan argumen, Anda lebih baik menggunakan pendekatan yang lebih fleksibel.

Listing 2

 #!/bin/bash # run this script with a few arguments echo you have entered $# arguments for i in $@ do echo $i done exit 0 

Listing 2 menunjukkan dua elemen baru yang terkait dengan argumen:

  • $ # Adalah penghitung yang menunjukkan berapa banyak argumen yang digunakan saat menjalankan skrip.
  • $ @ Adalah daftar semua argumen yang digunakan saat menjalankan skrip.

Untuk daftar argumen yang digunakan saat menjalankan skrip ini, loop for digunakan. Dalam untuk loop, instruksi dieksekusi selama kondisinya benar. Dalam skenario ini, kondisi untuk i di $ @ berarti "untuk setiap argumen." Setiap kali skrip melewati loop, nilai dari variabel $ @ ditugaskan ke variabel $ i .

Jadi, selama ada argumen, isi skrip dieksekusi.

Badan for for selalu dimulai dengan do dan closes selesai , dan perintah yang akan dieksekusi terdaftar di antara dua kata kunci ini. Dengan demikian, skrip sampel akan menggunakan gema untuk menampilkan nilai setiap argumen dan berhenti ketika tidak ada lagi argumen yang tersedia.

Mari kita coba skrip di Listing 2 dalam contoh ini:

  1. Ketikkan vi argumen untuk membuat file argumen dan salin konten dari skrip di Listing 2 ke file ini.
  2. Simpan file dan buat itu bisa dieksekusi.
  3. Jalankan perintah ./argument abc . Anda akan melihat bahwa tiga baris ditampilkan.
  4. Jalankan perintah ./argument abcdef . Anda akan melihat bahwa selain abc, de f juga akan ditampilkan.

Variabel


Variabel adalah label yang digunakan untuk menunjukkan tempat tertentu dalam memori yang berisi nilai tertentu. Variabel dapat didefinisikan secara statis menggunakan NAME = nilai atau secara dinamis. Ada dua solusi untuk mendefinisikan variabel secara dinamis:

  • Gunakan kata kunci baca dalam skrip untuk meminta data dari pengguna yang menjalankan skrip.
  • Gunakan substitusi perintah untuk menggunakan hasil dari perintah dan menugaskannya ke variabel. Sebagai contoh, tanggal perintah +% d-% m-% y menunjukkan tanggal saat ini dalam format hari-bulan-tahun. Untuk melakukan ini dalam skrip, Anda dapat menggunakan HARI INI = $ (tanggal +% d-% m-% y) . Untuk mengganti perintah, Anda hanya perlu menempatkan perintah yang hasilnya ingin Anda gunakan di antara tanda kurung.

Di bagian sebelumnya tentang parameter posisi, Anda mempelajari cara menetapkan argumen ke variabel saat menjalankan skrip. Dalam beberapa kasus, mungkin lebih efisien untuk meminta informasi ketika Anda menemukan sesuatu yang substansial hilang. Script di bawah ini menunjukkan cara melakukan ini.

Daftar 3. Contoh skrip menggunakan perintah baca

 #!/bin/bash if [ -z $1 ]; then echo enter a text read TEXT else TEXT=$1 fi echo you have entered the text $TEXT exit 0 

Dalam skrip di Listing 3, operator if ... then ... else ... fi digunakan untuk menguji keberadaan argumen $ 1 . Ini dilakukan dengan menggunakan tes (tes adalah perintah terpisah). Perintah tes dapat ditulis dalam dua cara *: test atau [...] . Pada contoh, baris jika [-z $ 1] ... dieksekusi untuk melihat tes (centang) -z $ 1 .

* - sebenarnya tiga sumber (sekitar Penerjemah)

-z menguji cek apakah $ 1 ada atau tidak. Dengan kata lain, baris jika [-z $ 1] memeriksa apakah $ 1 kosong, yang berarti tidak ada argumen yang diberikan ketika skrip ini dijalankan. Jika demikian, perintah setelah pernyataan itu dijalankan.

Harap dicatat bahwa ketika menulis perintah uji dengan tanda kurung siku, penting untuk menggunakan spasi setelah braket pembuka dan sebelum braket penutup, tanpa spasi perintah tidak akan berfungsi.

Perhatikan bahwa pernyataan kemudian segera mengikuti tes . Ini dimungkinkan karena titik koma (;) digunakan. Tanda titik koma adalah pemisah perintah dan dapat menggantikan baris baru dalam skrip.

Pernyataan kemudian mengeksekusi dua perintah: perintah gema , yang menampilkan pesan di layar, dan perintah baca .

Perintah baca menghentikan skrip sehingga input pengguna dapat diproses dan disimpan dalam variabel TEXT. Oleh karena itu, baca TEXT menempatkan semua input pengguna ke dalam variabel TEXT, yang akan digunakan nanti dalam skrip.

Bagian selanjutnya diwakili oleh pernyataan lain . Perintah setelah pernyataan lain dieksekusi dalam semua kasus lain, yang dalam hal ini berarti "jika tidak, jika argumen diberikan." Jika demikian, maka variabel TEKS ditentukan dan nilai saat ini $ 1 ditugaskan untuk itu.

Perhatikan bagaimana variabel didefinisikan: segera setelah nama variabel ada tanda = diikuti oleh $ 1. Perhatikan bahwa Anda tidak boleh menggunakan spasi saat mendefinisikan variabel.

Kemudian, jika kondisi ditutup menggunakan operator fi . Setelah kondisi jika selesai, Anda tahu pasti bahwa variabel TEXT didefinisikan dan memiliki nilai. Baris kedua dari belakang skrip membaca nilai variabel TEXT dan memetakan nilai ini ke STDOUT menggunakan perintah gema . Perhatikan bahwa untuk meminta nilai variabel saat ini, ini merujuk pada nama variabel, dimulai dengan tanda $ di depannya.

Anda dapat berlatih menggunakan contoh ini saat bekerja dengan input.

  1. Buka editor dan buat file bernama teks. Masukkan konten kode dalam Listing 3 ke dalam file ini.
  2. Tulis file ke disk dan jalankan chmod + x teks untuk membuatnya dieksekusi.
  3. Jalankan skrip dengan menjalankan ./text dan tanpa argumen tambahan. Anda akan melihat bahwa ia meminta input.
  4. Jalankan skrip menggunakan " halo " sebagai argumen (./teks halo). Hasilnya akan menampilkan "Anda telah memasukkan teks halo" di STDOUT.

Menggunakan kondisi dan loop


Seperti yang telah Anda lihat, pernyataan kondisional dapat digunakan dalam skrip. Pernyataan bersyarat ini dieksekusi hanya jika kondisi tertentu terpenuhi.

Ada beberapa pernyataan kondisional dan loop dalam bash yang sering digunakan.

  • if ... then ... else - digunakan untuk mengeksekusi kode jika kondisi tertentu terpenuhi
  • untuk - digunakan untuk menjalankan perintah untuk sejumlah nilai
  • while - digunakan untuk mengeksekusi kode jika kondisi tertentu terpenuhi
  • sebelum - digunakan untuk mengeksekusi kode sampai kondisi tertentu terpenuhi
  • case - digunakan untuk mengevaluasi sejumlah nilai tertentu

jika kemudian yang lain


Konstruksi if then else adalah umum untuk mengevaluasi kondisi tertentu. Anda telah melihat contoh dengannya. Pernyataan bersyarat ini sering digunakan dengan perintah tes . Perintah ini memungkinkan Anda untuk memeriksa banyak hal: misalnya, tidak hanya apakah ada file, tetapi juga membandingkan file, membandingkan bilangan bulat, dan banyak lagi.
Anda dapat mempelajari lebih lanjut tentang tes dalam referensi dengan tes man perintah.

Dasar jika konstruk adalah jika ... maka ... fi .

Ini membandingkan satu kondisi, seperti yang ditunjukkan pada contoh berikut:

 if [ -z $1 ] then echo no value provided fi 

Dalam Listing 3, Anda melihat bagaimana Anda dapat mengevaluasi dua kondisi, termasuk yang lain dalam ekspresi. Listing 4 menunjukkan cara mengevaluasi beberapa kondisi dari jika ke yang lain . Ini berguna jika Anda perlu memeriksa banyak nilai yang berbeda.

Perhatikan bahwa contoh ini juga menggunakan beberapa perintah pengujian .

Listing 4 . Contoh dengan if then else

 #!/bin/bash # run this script with one argument # the goal is to find out if the argument is a file or a directory if [ -f $1 ] then echo "$1 is a file" elif [ -d $1 ] then echo "$1 is a directory" else echo "I do not know what \$1 is" fi exit 0 

|| dan &&


Alih-alih menulis lengkap jika ... pernyataan, maka Anda dapat menggunakan operator logis || serta && . || adalah "OR" logis dan akan mengeksekusi bagian kedua dari pernyataan hanya jika bagian pertama tidak benar; && adalah β€œAND” yang logis dan akan menjalankan bagian kedua dari pernyataan hanya jika bagian pertama benar.

Pertimbangkan dua baris ini:

 [ -z $1 ] && echo no argument provided 

 ping -c 1 8.8.8.8 2>/dev/null || echo node is not available 

Contoh pertama memeriksa apakah $ 1 kosong. Jika pemeriksaan ini benar (yang pada dasarnya berarti bahwa perintah berakhir dengan kode keluar 0), perintah kedua dijalankan.

Dalam contoh kedua, perintah ping digunakan untuk memeriksa ketersediaan host.
Contoh ini menggunakan "OR" logis untuk menampilkan teks "node tidak tersedia" jika terjadi kegagalan perintah ping .

Anda akan sering menemukan itu, alih-alih pernyataan kondisi bersyarat, && dan || . Dalam latihan di bawah ini, Anda dapat berlatih menggunakan pernyataan bersyarat menggunakan jika ... maka ... yang lain , atau && dan || .

Latihan Menggunakan if ... then ... else

Dalam latihan ini, Anda akan mengerjakan skrip yang memeriksa apa itu file dan apa itu direktori.

  1. Luncurkan editor dan buat skrip bernama filechk.
  2. Salin konten Listing 4 ke dalam skrip ini.
  3. Jalankan beberapa tes dengan itu, seperti ./filechk / etc / hosts , ./filechck / usr , ./filechk file yang tidak ada .

Untuk loop


For loop adalah solusi tepat untuk memproses rentang data. Dalam Listing 5, Anda dapat melihat contoh pertama dengan untuk , di mana rentang ditentukan dan diproses saat ada nilai mentah dalam rentang ini.

Listing 5

 #!/bin/bash # for (( COUNTER=100; COUNTER>1; COUNTER-- )); do echo $COUNTER done exit 0 

A for loop selalu dimulai dengan untuk kata kunci, diikuti oleh kondisi yang perlu diperiksa. Ini diikuti oleh kata kunci do , diikuti oleh perintah yang harus dieksekusi, jika kondisinya benar, loop berakhir menggunakan kata kunci yang dilakukan .

Dalam contoh di Listing 5, Anda dapat melihat bahwa kondisinya adalah rentang angka dalam tanda kurung yang ditetapkan ke variabel COUNTER.

Sedikit penjelasan

Di dalam (()) ekspresi aritmatika dihitung dan hasilnya dikembalikan. Misalnya, dalam kasus paling sederhana, konstruksi a = $ ((5 + 3)) akan menetapkan variabel "a" nilai ekspresi "5 + 3", atau 8. Selain itu, tanda kurung ganda memungkinkan bekerja dengan variabel dalam gaya bahasa C.

Pertama, variabel diinisialisasi ke 100, dan selama nilainya lebih besar dari 1, dikurangi 1 pada setiap iterasi. Selama kondisinya benar, nilai variabel $ COUNTER ditampilkan menggunakan perintah echo .

Dalam Listing 6, Anda dapat melihat salah satu kalimat favorit saya untuk . Rentang ini didefinisikan kali ini sebagai urutan angka, mulai dari 100 dan mencapai 104.

Listing 6

 for i in {100..104}; do ping –c 1 192.168.4.$i >/dev/null && echo 192.168.4.$i is up; done 

Perhatikan bagaimana rentang ditentukan: pertama Anda tentukan angka pertama, lalu dua poin dan tunjukkan angka terakhir dalam rentang. Selain itu, dengan untuk i dalam, untuk masing-masing angka-angka ini, variabel i ditugaskan. Masing-masing angka ini diberikan ke variabel i dan kemudian perintah ping dieksekusi, di mana opsi -c 1 memastikan bahwa hanya satu permintaan yang dikirim.

Hasil dari perintah ping tidak diperhitungkan, sehingga hasilnya dialihkan ke / dev / null. Berdasarkan status keluaran dari perintah ping , sebagian dari ekspresi && dijalankan. Jadi, jika tuan rumah tersedia, sebuah garis ditampilkan yang menunjukkan bahwa ia sedang berjalan.

Memahami sementara dan sampai


Jika pernyataan for yang baru saja Anda baca berguna untuk bekerja dengan rentang elemen, pernyataan while berguna ketika Anda ingin melacak sesuatu seperti aksesibilitas proses. Ada juga pernyataan sampai , yang dieksekusi selama kondisi yang diperiksa salah. Dalam Listing 7, Anda dapat membaca bagaimana saat digunakan untuk memantau aktivitas proses.
Catatan Saya tidak mengerti apa yang dilakukan skrip ini. Dalam kasus saya, CentOS 7 digunakan dan secara default tidak ada monitor, meskipun skrip secara eksplisit mengatakan:
  penggunaan: monitor <processname> 
Di suatu tempat selama setengah jam saya mencari program monitor CetOS di Google, tetapi tidak menemukannya. Dan umumnya tidak jelas monitor sisi apa yang ada di sini jika ps aux digunakan. Bagaimanapun, saya tidak mengerti apa yang dilakukan skrip ini. Permintaan besar untuk membantu menyelesaikan masalah ini adalah untuk menyesuaikan teks dan / atau skrip.
Listing 7

 #!/bin/bash # # usage: monitor <processname> while ps aux | grep $1 | grep -v grep > /dev/tty11 do sleep 5 done clear echo your process has stopped logger $1 is no longer present mail -s "process $1 has stopped" root < . 

Script dalam Listing 7 terdiri dari dua bagian. Pertama, ada loop sementara . Kedua, ada semua yang perlu dilakukan ketika loop sementara tidak lagi dievaluasi sebagai benar.

Inti dari while loop adalah perintah ps , yang memiliki nilai $ 1 .

Perhatikan penggunaan grep -v grep , yang mengecualikan baris yang berisi perintah grep dari hasilnya. Ingat bahwa perintah ps akan mencakup semua proses yang sedang berjalan, termasuk perintah grep , di mana output dari perintah ps dilewatkan. Ini dapat menyebabkan kecocokan positif palsu.

Output dari perintah ps aux diarahkan ke / dev / tty11. Ini memungkinkan Anda membaca hasil dari tty11 nanti, jika perlu, tetapi hasilnya tidak ditampilkan secara default.

Pernyataan sementara diikuti oleh perintah yang harus dijalankan jika kondisi yang diperiksa benar. Dalam hal ini, itu adalah perintah sleep 5 , yang menghentikan eksekusi skrip selama 5 detik.

Selama kondisi pernyataan sementara benar, loop terus dijalankan. Jika kondisinya salah (yang dalam hal ini berarti bahwa proses tidak lagi tersedia), maka siklus berhenti dan perintah yang mengikutinya dapat dieksekusi.

Anda harus terbiasa dengan semua perintah ini kecuali yang terakhir. Dalam baris tersebut, "proses $ 1 telah berhenti" root <. pesan dikirim ke pengguna root menggunakan sistem surat internal, yang berjalan di Linux * secara default. Perintah suratmengambil sebagai argumen pertama subjek pesan yang ditentukan dengan opsi -s .

* - setidaknya pada CentOS berfungsi secara default. (at. translator)

Perhatikan <. di akhir tim.

Biasanya, ketika menggunakan perintah email dalam mode interaktif, editor terbuka di mana Anda dapat menulis isi pesan. Editor ini ditutup, menyediakan garis yang hanya memiliki periode. Dalam perintah ini, sebuah titik disediakan dengan mengarahkan ulang STDIN. Ini memungkinkan pesan untuk diproses tanpa persyaratan tambahan untuk aktivitas pengguna.

Siklus sementara - kebalikan dari siklus sampai , contoh yang ditampilkan dalam daftar 8.hingga memulai iterasi yang berlangsung hingga kondisi menjadi benar.

Dalam Listing 8, digunakan untuk memfilter output dari perintah pengguna dengan kemunculan $ 1 , yang akan menjadi nama pengguna. Sampai perintah ini benar, iterasi berlanjut. Ketika nama pengguna ditemukan di output pengguna, iterasi ditutup, dan setelah loop sampai seluruh perintah dieksekusi.

Listing 8

 #!/bin/bash # until users | grep $1 > /dev/null do echo $1 is not logged in yet sleep 5 done echo $1 has just logged in mail -s "$1 has just logged in" root < . 

Memahami kasus


Loop iterasi penting terakhir adalah case *. Operator kasus digunakan untuk mengevaluasi sejumlah nilai yang diharapkan. Secara khusus, pernyataan kasus penting dalam skrip startup Linux, yang dalam versi sebelumnya digunakan untuk memulai layanan.

* - apakah ini sebuah siklus?

Dalam pernyataan kasus, Anda mendefinisikan setiap argumen spesifik yang Anda harapkan, diikuti oleh perintah yang perlu dijalankan jika argumen itu digunakan.

Dalam Listing 9, Anda dapat melihat pernyataan kasus , yang digunakan dalam versi sebelumnya untuk menjalankan hampir semua layanan.

Listing 9

 case "$1" in start) start;; stop) rm -f $lockfile stop;; restart) restart;; reload) reload;; status) status ;; *) echo "Usage: $0 (start|stop|restart|reload|status)" ;; esac 

case memiliki beberapa fitur. Pertama datang garis - case secara berurutan . Ini diikuti oleh daftar semua nilai yang mungkin perlu dievaluasi. Setiap elemen ditutup dengan braket ) .

Ini diikuti oleh daftar perintah yang akan dieksekusi jika argumen spesifik digunakan. Daftar perintah ditutup dengan titik koma ganda ;; dapat digunakan segera setelah perintah terakhir dan dapat digunakan pada baris terpisah.

Perhatikan juga bahwa *) berlaku untuk semua parameter lain yang tidak ditentukan sebelumnya. Ini adalah operator yang mencakup segalanya.

Lingkaran iterasi kasus berakhir dengan pernyataan esac .

Perhatikan bahwa urutan dalam kasus dijalankan secara berurutan. Ketika pertandingan pertama dibuat, pernyataan kasus tidak akan mengevaluasi apa pun.

Sebagai bagian dari penilaian, templat yang mirip dengan templat dapat digunakan. Ini ditampilkan dalam *) urutan yang cocok dengan semuanya. Tetapi Anda juga dapat menggunakan urutan seperti mulai | Mulai | MULAI) untuk mencocokkan menggunakan case lain .

Skrip Debugging di Bash


Ketika skrip tidak melakukan apa yang Anda harapkan, ada baiknya melakukan debugging. Untuk memulai, coba jalankan sebagai argumen pada perintah bash -x . Ini akan menunjukkan kepada Anda baris demi baris apa yang coba dibuat skrip, serta kesalahan spesifik jika tidak berfungsi sebagaimana mestinya.

Listing 10 menunjukkan contoh penggunaan bash -x , di mana segera menjadi jelas bahwa perintah grep tidak tahu apa yang harus dilakukan, karena argumen untuk operasinya tidak ada.

 [root@server1 ~]# bash -x 319.sh + grep Usage: grep [OPTION]... PATTERN [FILE]... Try 'grep --help' for more information. + users + echo is not logged in yet is not logged in yet + sleep 5 

Untuk meringkas


Di artikel ini, Anda belajar cara menulis skrip shell. Anda telah melihat beberapa contoh dan sekarang terbiasa dengan beberapa elemen dasar yang diperlukan untuk membuat skrip yang sukses.

Source: https://habr.com/ru/post/id471242/


All Articles