Skrip Bash: bermula

Skrip Bash: bermula
Skrip Bash Bahagian 2: Gelung
Skrip Bash, bahagian 3: pilihan baris arahan dan suis
Skrip Bash, bahagian 4: input dan output
Skrip Bash, bahagian 5: isyarat, tugas latar belakang, pengurusan skrip
Skrip Bash, Bahagian 6: Fungsi dan Pembangunan Perpustakaan
Skrip Bash, bahagian 7: sed dan pemprosesan perkataan
Skrip Bash, Bahagian 8: Bahasa Pemprosesan Data awk
Skrip Bash Bahagian 9: Ungkapan Biasa
Skrip Bash Bahagian 10: Contoh Praktikal
Skrip Bash, bahagian 11: jangkakan dan automasi utiliti interaktif

Hari ini kita akan bercakap tentang skrip bash. ini - skrip baris arahan, ditulis untuk shell bash. Terdapat cangkerang lain, seperti zsh, tcsh, ksh, tetapi kami akan memberi tumpuan kepada bash. Bahan ini ditujukan untuk semua orang, satu-satunya syarat adalah keupayaan untuk bekerja baris arahan Linux.

Skrip Bash: bermula

Skrip baris arahan ialah set perintah yang sama yang boleh dimasukkan dari papan kekunci, dikumpulkan dalam fail dan disatukan oleh beberapa tujuan bersama. Pada masa yang sama, hasil kerja pasukan boleh sama ada bernilai bebas atau berfungsi sebagai input untuk pasukan lain. Skrip ialah cara yang berkesan untuk mengautomasikan tindakan yang kerap dilakukan.

Skrip Bash: bermula

Jadi, jika kita bercakap tentang baris arahan, ia membolehkan anda melaksanakan beberapa arahan sekaligus, memasukkannya dengan koma bertitik:

pwd ; whoami

Malah, jika anda telah mencuba ini dalam terminal anda, skrip bash pertama anda yang menggunakan dua arahan telah pun ditulis. Ia berfungsi seperti ini. Pasukan dahulu pwd memaparkan maklumat tentang direktori kerja semasa, kemudian arahan whoamimenunjukkan maklumat tentang pengguna yang anda log masuk sebagai.

Menggunakan pendekatan ini, anda boleh menggabungkan seberapa banyak arahan yang anda mahu pada satu baris, hadnya hanyalah bilangan maksimum argumen yang boleh dihantar ke program. Anda boleh menentukan had ini dengan arahan berikut:

getconf ARG_MAX

Baris arahan adalah alat yang hebat, tetapi anda perlu memasukkan arahan ke dalamnya setiap kali anda memerlukannya. Bagaimana jika kita menulis satu set arahan pada fail dan hanya memanggil fail itu untuk melaksanakannya? Sebenarnya, fail yang kita bicarakan dipanggil skrip baris arahan.

Cara skrip bash berfungsi

Buat fail kosong menggunakan arahan touch. Dalam baris pertamanya, anda perlu menentukan shell yang akan kami gunakan. Kami berminat bash, jadi baris pertama fail ialah:

#!/bin/bash

Di tempat lain dalam fail ini, simbol cincang digunakan untuk menunjukkan komen yang shell tidak diproses. Walau bagaimanapun, baris pertama ialah kes khas, ia adalah tanda paun diikuti dengan tanda seru (urutan ini dipanggil shebang) dan jalan ke bash, tunjukkan kepada sistem yang skrip dicipta khusus untuknya bash.

Perintah Shell dipisahkan oleh suapan baris, komen dipisahkan dengan tanda paun. Inilah rupanya:

#!/bin/bash
# This is a comment
pwd
whoami

Di sini, sama seperti pada baris arahan, anda boleh menulis arahan pada satu baris, memisahkannya dengan koma bertitik. Walau bagaimanapun, jika anda menulis arahan pada baris yang berbeza, fail lebih mudah dibaca. Walau apa pun, shell akan memprosesnya.

Menetapkan Kebenaran pada Fail Skrip

Simpan fail dengan memberikan nama myscript, dan skrip bash hampir selesai. Sekarang tinggal hanya untuk menjadikan fail ini boleh laku, jika tidak, apabila anda cuba menjalankannya, anda akan menghadapi ralat Permission denied.

Skrip Bash: bermula
Percubaan untuk menjalankan fail skrip dengan kebenaran yang dikonfigurasikan dengan salah

Mari jadikan fail boleh laku:

chmod +x ./myscript

Sekarang mari cuba laksanakannya:

./myscript

Selepas menetapkan kebenaran, semuanya berfungsi sebagaimana mestinya.

Skrip Bash: bermula
Berjaya menjalankan skrip bash

Keluaran mesej

Untuk mencetak teks ke konsol Linux, gunakan arahan echo. Mari gunakan pengetahuan tentang fakta ini dan edit skrip kami, menambah penjelasan kepada data yang mengeluarkan arahan yang sudah ada di dalamnya:

#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoami

Inilah yang berlaku selepas menjalankan skrip yang dikemas kini.

Skrip Bash: bermula
Mengeluarkan mesej daripada skrip

Sekarang kita boleh memaparkan label penjelasan menggunakan arahan echo. Jika anda tidak tahu cara mengedit fail menggunakan alat Linux, atau jika anda tidak pernah melihat arahan itu sebelum ini echo, lihatlah ini bahan itu.

Menggunakan Pembolehubah

Pembolehubah membolehkan anda menyimpan maklumat dalam fail skrip, seperti hasil arahan, untuk digunakan oleh arahan lain.

Tidak ada yang salah dengan melaksanakan arahan individu tanpa menyimpan hasil kerja mereka, tetapi kemungkinan pendekatan ini sangat terhad.

Terdapat dua jenis pembolehubah yang boleh digunakan dalam skrip bash:

  • Pembolehubah Persekitaran
  • Pembolehubah pengguna

Pembolehubah Persekitaran

Kadangkala arahan shell perlu berfungsi dengan beberapa data sistem. Sebagai contoh, berikut ialah cara untuk memaparkan direktori rumah pengguna semasa:

#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"

Sila ambil perhatian bahawa kita boleh menggunakan pembolehubah sistem $HOME dalam petikan berganda, ini tidak akan menghalang sistem daripada mengenalinya. Inilah yang berlaku jika anda menjalankan skrip di atas.

Skrip Bash: bermula
Menggunakan Pembolehubah Persekitaran dalam Skrip

Tetapi bagaimana jika anda ingin memaparkan tanda dolar? Mari cuba ini:

echo "I have $1 in my pocket"

Sistem akan mengesan tanda dolar dalam rentetan yang dibatasi oleh petikan dan menganggap bahawa kami telah merujuk pembolehubah. Skrip akan cuba memaparkan nilai pembolehubah yang tidak ditentukan. $1. Ini bukan yang kita perlukan. Apa nak buat?

Dalam situasi seperti ini, menggunakan aksara kawalan garisan belakang sebelum tanda dolar membantu:

echo "I have $1 in my pocket"

Skrip kini akan mengeluarkan dengan tepat apa yang diharapkan.

Skrip Bash: bermula
Menggunakan Urutan Melarikan Diri untuk Mengeluarkan Tanda Dolar

Pembolehubah pengguna

Selain pembolehubah persekitaran, skrip bash membolehkan anda menetapkan dan menggunakan pembolehubah anda sendiri dalam skrip. Pembolehubah sedemikian memegang nilai sehingga skrip tamat.

Seperti pembolehubah sistem, pembolehubah pengguna boleh diakses menggunakan tanda dolar:
TNW-CUS-FMP - kod promosi untuk diskaun 10% pada perkhidmatan kami, tersedia untuk pengaktifan dalam masa 7 hari

#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"

Inilah yang berlaku selepas menjalankan skrip sedemikian.

Skrip Bash: bermula
Pembolehubah Tersuai dalam Skrip

Penggantian arahan

Salah satu ciri skrip bash yang paling berguna ialah keupayaan untuk mengekstrak maklumat daripada output arahan dan menetapkannya kepada pembolehubah, yang membolehkan anda menggunakan maklumat ini di mana-mana dalam fail skrip.

Ini boleh dilakukan dengan dua cara.

  • Dengan aksara tanda belakang "`"
  • Dengan bantuan pembinaan $()

Apabila menggunakan pendekatan pertama, berhati-hati untuk tidak menggunakan satu petikan dan bukannya tanda belakang. Perintah itu mesti disertakan dalam dua ikon sedemikian:

mydir=`pwd`

Dalam pendekatan kedua, perkara yang sama ditulis seperti ini:

mydir=$(pwd)

Dan skrip, pada akhirnya, mungkin kelihatan seperti ini:

#!/bin/bash
mydir=$(pwd)
echo $mydir

Semasa operasinya, output arahan pwdakan disimpan dalam pembolehubah mydir, yang kandungannya, menggunakan arahan echo, akan pergi ke konsol.

Skrip Bash: bermula
Skrip yang menyimpan hasil arahan dalam pembolehubah

Operasi matematik

Untuk melaksanakan operasi matematik dalam fail skrip, anda boleh menggunakan pembinaan borang $((a+b)):

#!/bin/bash
var1=$(( 5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2

Skrip Bash: bermula
Operasi matematik dalam skrip

struktur kawalan jika-maka

Dalam sesetengah senario, ia diperlukan untuk mengawal aliran pelaksanaan arahan. Sebagai contoh, jika nilai tertentu lebih besar daripada lima, satu tindakan mesti dilakukan, jika tidak, satu lagi tindakan. Ini boleh digunakan dalam banyak situasi, dan di sini struktur kawalan akan membantu kami if-then. Dalam bentuk yang paling mudah, ia kelihatan seperti ini:

if ΠΊΠΎΠΌΠ°Π½Π΄Π°
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
fi

Dan inilah contoh yang berfungsi:

#!/bin/bash
if pwd
then
echo "It works"
fi

Dalam kes ini, jika pelaksanaan arahan pwdselesai dengan jayanya, teks "ia berfungsi" akan dipaparkan dalam konsol.

Mari gunakan pengetahuan yang kita ada dan tulis senario yang lebih kompleks. Katakan kita perlu mencari pengguna masuk /etc/passwd, dan jika ia ditemui, laporkan bahawa ia wujud.

#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi

Inilah yang berlaku selepas menjalankan skrip ini.

Skrip Bash: bermula
Carian pengguna

Di sini kami telah menggunakan arahan grepuntuk mencari pengguna dalam fail /etc/passwd. Jika pasukan greptidak biasa kepada anda, penerangannya boleh didapati di sini.

Dalam contoh ini, jika pengguna ditemui, skrip akan memaparkan mesej yang sesuai. Bagaimana jika pengguna tidak dapat ditemui? Dalam kes ini, skrip hanya akan menyelesaikan pelaksanaan tanpa memberitahu kami apa-apa. Saya ingin dia memberitahu kami tentang perkara ini juga, jadi mari kita perbaiki kod tersebut.

Konstruk kawalan if-then-else

Agar program dapat melaporkan kedua-dua hasil carian yang berjaya dan kegagalan, kami menggunakan pembinaan if-then-else. Begini cara ia disediakan:

if ΠΊΠΎΠΌΠ°Π½Π΄Π°
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
else
ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
fi

Jika arahan pertama mengembalikan sifar, yang bermaksud ia berjaya dilaksanakan, syaratnya akan menjadi benar dan pelaksanaan tidak akan pergi sepanjang cawangan else. Jika tidak, jika sesuatu selain sifar dikembalikan, yang bermaksud kegagalan, atau hasil palsu, arahan selepas itu else.

Mari tulis skrip berikut:

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesn’t exist"
fi

Eksekusinya jatuh ke bawah else.

Skrip Bash: bermula
Menjalankan skrip dengan binaan if-then-else

Baiklah, mari kita teruskan dan tanya diri kita tentang keadaan yang lebih sukar. Bagaimana jika anda perlu menyemak bukan satu syarat, tetapi beberapa? Sebagai contoh, jika pengguna yang diperlukan ditemui, satu mesej harus dipaparkan, jika beberapa syarat lain dipenuhi, mesej lain harus dipaparkan, dan seterusnya. Dalam keadaan sedemikian, keadaan bersarang akan membantu kita. Ia kelihatan seperti ini:

if ΠΊΠΎΠΌΠ°Π½Π΄Π°1
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
elif ΠΊΠΎΠΌΠ°Π½Π΄Π°2
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
fi

Jika arahan pertama mengembalikan sifar, yang menunjukkan pelaksanaannya berjaya, arahan dalam blok pertama akan dilaksanakan then, jika tidak, jika syarat pertama adalah palsu, dan jika arahan kedua mengembalikan sifar, blok kod kedua akan dilaksanakan.

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
elif ls /home
then
echo "The user doesn’t exist but anyway there is a directory under /home"
fi

Dalam skrip sedemikian, anda boleh, sebagai contoh, mencipta pengguna baharu menggunakan arahan useradd, jika carian tidak menghasilkan hasil, atau lakukan perkara lain yang berguna.

Perbandingan Nombor

Dalam skrip, anda boleh membandingkan nilai angka. Di bawah ialah senarai arahan yang berkaitan.

n1 -eq n2Mengembalikan benar jika n1 sama dengan n2.
n1 -ge n2 Mengembalikan benar jika n1lebih atau sama n2.
n1 -gt n2Mengembalikan benar jika n1 lebih n2.
n1 -le n2Mengembalikan benar jika n1kurang atau sama n2.
n1 -lt n2Mengembalikan benar jika n1 kurang daripada n2.
n1 -ne n2Mengembalikan benar jika n1tidak sama n2.

Sebagai contoh, mari cuba salah satu pengendali perbandingan. Perhatikan bahawa ungkapan itu disertakan dalam kurungan segi empat sama.

#!/bin/bash
val1=6
if [ $val1 -gt 5 ]
then
echo "The test value $val1 is greater than 5"
else
echo "The test value $val1 is not greater than 5"
fi

Inilah yang akan dikeluarkan oleh arahan ini.

Skrip Bash: bermula
Membandingkan nombor dalam skrip

Nilai boleh ubah val1lebih daripada 5, akhirnya cawangan itu dilaksanakan thenoperator perbandingan dan mesej yang sepadan dipaparkan dalam konsol.

Perbandingan rentetan

Skrip juga boleh membandingkan nilai rentetan. Pengendali perbandingan kelihatan agak mudah, tetapi pengendali perbandingan rentetan mempunyai keanehan tertentu, yang akan kami sentuh di bawah. Berikut ialah senarai pengendali.

str1 = str2 Menguji rentetan untuk kesamaan, mengembalikan benar jika rentetan adalah sama.
str1 != str2Mengembalikan benar jika rentetan tidak sama.
str1 < str2Mengembalikan benar jika str1kurang daripada str2.
str1 > str2 Mengembalikan benar jika str1lebih daripada str2.
-n str1 Mengembalikan benar jika panjang str1Di atas sifar.
-z str1Mengembalikan benar jika panjang str1sama dengan sifar.

Berikut ialah contoh perbandingan rentetan dalam skrip:

#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user  is the current logged in user"
fi

Hasil daripada pelaksanaan skrip, kami mendapat perkara berikut.

Skrip Bash: bermula
Perbandingan Rentetan dalam Skrip

Berikut adalah satu ciri perbandingan rentetan yang patut disebut. Iaitu, pengendali ">" dan "<" mesti dilepaskan dengan garis miring ke belakang, jika tidak skrip tidak akan berfungsi dengan betul, walaupun tiada mesej ralat akan muncul. Skrip mentafsir tanda ">" sebagai arahan untuk mengubah hala output.

Inilah cara bekerja dengan pengendali ini kelihatan dalam kod:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Berikut adalah hasil skrip.

Skrip Bash: bermula
Perbandingan rentetan, amaran dilemparkan

Ambil perhatian bahawa skrip, walaupun ia sedang dilaksanakan, memberikan amaran:

./myscript: line 5: [: too many arguments

Untuk menghapuskan amaran ini, kami membuat kesimpulan $val2 dalam petikan berganda:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > "$val2" ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Sekarang semuanya berfungsi sebagaimana mestinya.

Skrip Bash: bermula
Perbandingan rentetan

Satu lagi ciri pengendali ">" dan "<" ialah cara ia berfungsi dengan aksara besar dan huruf kecil. Untuk memahami ciri ini, mari sediakan fail teks dengan kandungan berikut:

Likegeeks
likegeeks

Simpan dengan nama myfiledan kemudian jalankan arahan berikut di terminal:

sort myfile

Ia akan menyusun baris dari fail seperti:

likegeeks
Likegeeks

Pasukan sort, secara lalai, mengisih rentetan dalam tertib menaik, bermakna huruf kecil dalam contoh kami adalah kurang daripada huruf besar. Sekarang mari kita sediakan skrip yang akan membandingkan rentetan yang sama:

#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Jika anda menjalankannya, ternyata sebaliknya adalah benar - huruf kecil kini lebih besar daripada huruf besar.

Skrip Bash: bermula
perintah susun dan perbandingan rentetan dalam fail skrip

Dalam perintah perbandingan, huruf besar lebih kecil daripada huruf kecil. Perbandingan rentetan di sini dilakukan dengan membandingkan kod aksara ASCII, oleh itu susunan isihan bergantung pada kod aksara.

Pasukan sort, seterusnya, menggunakan susunan isihan yang dinyatakan dalam tetapan bahasa sistem.

Pemeriksaan fail

Mungkin arahan di bawah paling kerap digunakan dalam skrip bash. Mereka membenarkan anda menyemak pelbagai syarat mengenai fail. Berikut ialah senarai arahan ini.

-d fileMenyemak sama ada fail wujud dan sama ada ia adalah direktori.
-e fileMenyemak sama ada fail wujud.
-f file Menyemak sama ada fail wujud dan sama ada ia adalah fail.
-r fileMenyemak sama ada fail itu wujud dan boleh dibaca.
-s file ПMenyemak sama ada fail itu wujud dan tidak kosong.
-w fileMenyemak sama ada fail itu wujud dan boleh ditulis.
-x fileMenyemak sama ada fail wujud dan boleh dilaksanakan.
file1 -nt file2 Menyemak sama ada ia lebih baharu file1daripada file2.
file1 -ot file2Semak jika lebih tua file1daripada file2.
-O file Menyemak sama ada fail itu wujud dan dimiliki oleh pengguna semasa.
-G fileMenyemak sama ada fail itu wujud dan sama ada ID kumpulannya sepadan dengan ID kumpulan pengguna semasa.

Perintah ini, serta banyak lagi yang dibincangkan hari ini, mudah diingati. Nama mereka, sebagai singkatan untuk pelbagai perkataan, secara langsung menunjukkan pemeriksaan yang mereka lakukan.

Mari cuba salah satu arahan dalam amalan:

#!/bin/bash
mydir=/home/likegeeks
if [ -d $mydir ]
then
echo "The $mydir directory exists"
cd $ mydir
ls
else
echo "The $mydir directory does not exist"
fi

Skrip ini, untuk direktori sedia ada, akan memaparkan kandungannya.

Skrip Bash: bermula
Menyenaraikan kandungan direktori

Kami percaya bahawa anda boleh bereksperimen dengan selebihnya perintah anda sendiri, semuanya terpakai mengikut prinsip yang sama.

Keputusan

Hari ini kita bercakap tentang cara mula menulis skrip bash dan merangkumi beberapa perkara asas. Malah, topik pengaturcaraan bash adalah besar. Artikel ini ialah terjemahan bahagian pertama siri besar 11 bahan. Jika anda ingin meneruskan sekarang, berikut ialah senarai asal bahan-bahan ini. Untuk kemudahan, terjemahan yang anda baru baca disertakan di sini.

  1. Skrip Bash Langkah Demi Langkah - di sini kita bercakap tentang cara mula membuat skrip bash, penggunaan pembolehubah dipertimbangkan, pembinaan bersyarat, pengiraan, perbandingan nombor, rentetan, mengetahui maklumat tentang fail diterangkan.
  2. Bash Skrip Bahagian 2, Bash yang hebat - di sini ciri-ciri bekerja dengan gelung for dan while didedahkan.
  3. Skrip Bash Bahagian 3, Parameter & pilihan - bahan ini dikhaskan untuk parameter baris perintah dan kunci yang boleh dihantar ke skrip, berfungsi dengan data yang dimasukkan pengguna dan yang boleh dibaca daripada fail.
  4. Skrip Bash Bahagian 4, Input & Output - di sini kita bercakap tentang deskriptor fail dan bekerja dengan mereka, tentang input, output, ralat, aliran ubah hala keluaran.
  5. Bash Skrip Bahagian 5, Sighal & Pekerjaan β€” bahan ini didedikasikan untuk isyarat Linux, pemprosesannya dalam skrip, pelancaran skrip yang dijadualkan.
  6. Skrip Bash Bahagian 6, Fungsi - di sini anda boleh belajar tentang mencipta dan menggunakan fungsi dalam skrip, tentang membangunkan perpustakaan.
  7. Bash Skrip Bahagian 7, Menggunakan sed β€” artikel ini adalah tentang bekerja dengan editor teks aliran sed.
  8. Bash Skrip Bahagian 8, Menggunakan awk β€” bahan ini dikhaskan untuk pengaturcaraan dalam bahasa pemprosesan data awk.
  9. Skrip Bash Bahagian 9, Ungkapan Biasa - di sini anda boleh membaca tentang penggunaan ungkapan biasa dalam skrip bash.
  10. Bash Skrip Bahagian 10, Contoh Praktikal - berikut ialah kaedah untuk bekerja dengan mesej yang boleh dihantar kepada pengguna, serta kaedah untuk memantau cakera.
  11. Bash Skrip Bahagian 11, Harapkan Perintah - bahan ini didedikasikan untuk alat Jangka, yang dengannya anda boleh mengautomasikan interaksi dengan utiliti interaktif. Khususnya, ini adalah mengenai jangkakan skrip dan cara ia berinteraksi dengan skrip bash dan program lain.

Kami berpendapat bahawa salah satu perkara yang hebat tentang siri artikel ini ialah ia bermula dari yang paling asas, sesuai untuk pengguna dari mana-mana peringkat, secara beransur-ansur membawa kepada topik yang agak serius, memberikan semua orang peluang untuk maju dalam skrip baris arahan Linux.

Pembaca yang dihormati! Kami meminta guru pengaturcaraan bash untuk bercakap tentang cara mereka mencapai tahap penguasaan, berkongsi rahsia, dan kami sedang menunggu tanggapan daripada mereka yang baru menulis skrip pertama mereka.

Skrip Bash: bermula

Hanya pengguna berdaftar boleh mengambil bahagian dalam tinjauan. Log masuk, Sama-sama.

Terjemahkan siri artikel yang lain?

  • Ya!

  • Tidak perlu

1030 pengguna mengundi. 106 pengguna berpantang.

Sumber: www.habr.com

Tambah komen