Dina iki kita bakal ngomong babagan skrip bash. Iki - skrip baris printah, ditulis kanggo cangkang bash. Ana cangkang liyane, kayata zsh, tcsh, ksh, nanging kita bakal fokus ing bash. Materi iki ditrapake kanggo kabeh wong, siji-sijine kondisi yaiku kemampuan kanggo nggarap baris printah Linux.
Skrip baris printah minangka set perintah sing padha sing bisa dilebokake saka keyboard, diklumpukake ing file lan digabungake kanthi tujuan umum. Ing wektu sing padha, asil karya tim bisa dadi nilai independen utawa dadi input kanggo tim liyane. Skrip minangka cara sing kuat kanggo ngotomatisasi tumindak sing asring ditindakake.
Dadi, yen kita pirembagan bab baris printah, iku ngijini sampeyan kanggo nindakake sawetara printah bebarengan, ngetik karo titik koma:
pwd ; whoami
Nyatane, yen sampeyan wis nyoba iki ing terminal sampeyan, skrip bash pisanan sampeyan sing nggunakake rong perintah wis ditulis. Kerjane kaya iki. Tim pisanan pwd nampilake informasi babagan direktori kerja saiki, banjur printah whoaminuduhake informasi babagan pangguna sing sampeyan mlebu minangka.
Nggunakake pendekatan iki, sampeyan bisa gabungke minangka akeh printah sing pengin ing siji baris, watesan mung jumlah maksimum bantahan sing bisa liwati kanggo program. Sampeyan bisa nemtokake watesan iki kanthi printah ing ngisor iki:
getconf ARG_MAX
Baris printah minangka alat sing apik, nanging sampeyan kudu ngetik printah saben-saben sampeyan butuh. Apa yen kita nulis sakumpulan printah menyang file lan mung nelpon file kasebut kanggo nglakokake? Nyatane, file sing kita gunakake diarani skrip baris perintah.
Cara kerja skrip bash
Nggawe file kosong nggunakake printah touch. Ing baris pisanan, sampeyan kudu nemtokake cangkang sing bakal digunakake. Kita kasengsem ing bash, dadi baris pisanan file bakal dadi:
#!/bin/bash
Ing papan liya ing file iki, simbol hash digunakake kanggo nuduhake komentar yen cangkang ora diproses. Nanging, baris pisanan minangka kasus khusus, minangka tandha pound sing diikuti karo tanda seru (urutan iki diarani sebang) lan dalan menyang bash, nuduhake menyang sistem sing script digawe khusus kanggo bash.
printah Shell dipisahake dening feed baris, komentar dipisahake dening tandha pound. Mangkene apa sing katon:
#!/bin/bash
# This is a comment
pwd
whoami
Ing kene, kaya ing baris printah, sampeyan bisa nulis printah ing siji baris, misahake karo titik koma. Nanging, yen sampeyan nulis perintah ing baris sing beda, file kasebut luwih gampang diwaca. Ing kasus apa wae, cangkang bakal ngolah.
Nyetel Idin ing File Skrip
Simpen file kanthi menehi jeneng myscript, lan skrip bash meh rampung. Saiki mung nggawe file iki bisa dieksekusi, yen ora, nalika sampeyan nyoba mbukak, sampeyan bakal nemoni kesalahan Permission denied.
Nyoba mbukak file skrip kanthi ijin sing ora dikonfigurasi kanthi bener
Ayo nggawe file bisa dieksekusi:
chmod +x ./myscript
Saiki ayo nyoba nglakokake:
./myscript
Sawise nyetel ijin, kabeh bisa mlaku kaya sing dikarepake.
Kasil mbukak skrip bash
Output pesen
Kanggo nyithak teks menyang konsol Linux, gunakake printah kasebut echo. Ayo gunakake kawruh babagan kasunyatan iki lan sunting skrip, nambah panjelasan menyang data sing ngasilake prentah sing wis ana:
#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoami
Mangkene kedadeyan sawise mbukak skrip sing dianyari.
Outputing pesen saka script
Saiki kita bisa nampilake label panjelasan nggunakake printah echo. Yen sampeyan ora ngerti carane nyunting file nggunakake alat Linux, utawa yen sampeyan durung weruh printah sadurunge echo, delengen iki materi.
Nggunakake Variabel
Variabel ngidini sampeyan nyimpen informasi ing file skrip, kayata asil printah, kanggo digunakake dening printah liyane.
Ora ana sing salah karo nglakokake prentah individu tanpa nyimpen asil karyane, nanging kemungkinan pendekatan iki winates banget.
Ana rong jinis variabel sing bisa digunakake ing skrip bash:
Variabel Lingkungan
Variabel panganggo
Variabel Lingkungan
Kadhangkala perintah cangkang kudu digarap sawetara data sistem. Contone, iki carane nampilake direktori ngarep pangguna saiki:
#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"
Elinga yen kita bisa nggunakake variabel sistem $HOME ing kuotasi pindho, iki ora bakal nyegah sistem saka pangling. Mangkene apa sing kedadeyan yen sampeyan mbukak skrip ing ndhuwur.
Nggunakake Variabel Lingkungan ing Skrip
Nanging apa yen sampeyan pengin nampilake tandha dolar? Ayo coba iki:
echo "I have $1 in my pocket"
Sistem bakal ndeteksi tandha dollar ing senar diwatesi dening kuotasi lan nganggep kita wis referensi variabel. Skrip bakal nyoba nampilake nilai variabel sing ora ditemtokake. $1. Iki dudu sing kita butuhake. Apa sing kudu ditindakake?
Ing kahanan kaya iki, nggunakake karakter kontrol backslash sadurunge tandha dollar mbantu:
echo "I have $1 in my pocket"
Skrip saiki bakal ngasilake persis apa sing dikarepake.
Nggunakake Urutan Uwal kanggo Output Tandha Dolar
Variabel panganggo
Saliyane variabel lingkungan, skrip bash ngidini sampeyan nyetel lan nggunakake variabel sampeyan dhewe ing skrip. Variabel kasebut nduweni nilai nganti skrip rampung.
Kaya variabel sistem, variabel pangguna bisa diakses kanthi nggunakake tandha dolar:
TNW-CUS-FMP - kode promo kanggo diskon 10% ing layanan kita, kasedhiya kanggo aktivasi ing 7 dina
#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"
Mangkene kedadeyan sawise mbukak skrip kasebut.
Variabel Kustom ing Skrip
Panggantos printah
Salah sawijining fitur skrip bash sing paling migunani yaiku kemampuan kanggo ngekstrak informasi saka output perintah lan menehi menyang variabel, sing ngidini sampeyan nggunakake informasi kasebut ing ngendi wae ing file skrip.
Iki bisa ditindakake kanthi rong cara.
Kanthi karakter backtic "`"
Kanthi bantuan saka construction $()
Nalika nggunakake pendekatan pisanan, ati-ati supaya ora nggunakake kutipan siji tinimbang backtick. Printah kasebut kudu dilampirake ing rong lambang kasebut:
mydir=`pwd`
Ing pendekatan kapindho, padha ditulis kaya iki:
mydir=$(pwd)
Lan skrip, ing pungkasan, bisa uga katon kaya iki:
#!/bin/bash
mydir=$(pwd)
echo $mydir
Sajrone operasi, output saka printah pwdbakal disimpen ing variabel mydir, sing isine, nggunakake printah echo, bakal pindhah menyang console.
Skrip sing nyimpen asil printah ing variabel
Operasi matematika
Kanggo nindakake operasi matematika ing file script, sampeyan bisa nggunakake construction saka wangun $((a+b)):
Ing sawetara skenario, perlu kanggo ngontrol aliran eksekusi perintah. Contone, yen nilai tartamtu luwih saka limang, siji tumindak kudu dileksanakake, digunakake liyane. Iki ditrapake ing akeh kahanan, lan ing kene struktur kontrol bakal mbantu kita if-then. Ing wangun sing paling gampang, katon kaya iki:
if ΠΊΠΎΠΌΠ°Π½Π΄Π°
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ
fi
Lan iki conto sing bisa digunakake:
#!/bin/bash
if pwd
then
echo "It works"
fi
Ing kasus iki, yen eksekusi printah pwdrampung kasil, teks "kerja" bakal ditampilake ing console.
Ayo nggunakake kawruh sing kita duwe lan nulis skenario sing luwih rumit. Ayo kita kudu golek pangguna ing /etc/passwd, lan yen ditemokake, lapor yen ana.
#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi
Iki kedadeyan sawise mbukak skrip iki.
Panelusuran pangguna
Kene kita wis nggunakake printah grepkanggo nggoleki pangguna ing file /etc/passwd. Yen tim grepora pati ngerti, katrangane bisa ditemokake kene.
Ing conto iki, yen pangguna ditemokake, skrip bakal nampilake pesen sing cocog. Apa yen pangguna ora bisa ditemokake? Ing kasus iki, skrip mung bakal ngrampungake eksekusi tanpa ngandhani apa-apa. Aku uga pengin dheweke ngandhani babagan iki, mula ayo nambah kode kasebut.
Konstruksi kontrol yen-banjur-liyane
Supaya program bisa nglaporake asil telusuran sing sukses lan gagal, kita nggunakake konstruksi kasebut if-then-else. Mangkene carane nyiyapake:
if ΠΊΠΎΠΌΠ°Π½Π΄Π°
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ
else
ΠΊΠΎΠΌΠ°Π½Π΄Ρ
fi
Yen printah pisanan ngasilake nol, tegese wis kasil dieksekusi, kondisi kasebut bakal bener lan eksekusi ora bakal ditindakake ing cabang kasebut. else. Yen ora, yen soko liyane saka nul bali, kang tegese Gagal, utawa asil palsu, printah sawise else.
Ayo nulis skrip ing ngisor iki:
#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesnβt exist"
fi
Eksekusi dheweke mudhun else.
Nglakokake skrip kanthi konstruksi if-then-else
Inggih, ayo nerusake lan takon dhewe babagan kahanan sing luwih angel. Apa yen sampeyan kudu mriksa ora siji kondisi, nanging sawetara? Contone, yen pangguna sing dibutuhake ditemokake, siji pesen kudu ditampilake, yen ana syarat liyane, pesen liyane kudu ditampilake, lan liya-liyane. Ing kahanan kaya mengkono, kahanan nested bakal mbantu kita. Katon kaya iki:
if ΠΊΠΎΠΌΠ°Π½Π΄Π°1
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ
elif ΠΊΠΎΠΌΠ°Π½Π΄Π°2
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ
fi
Yen printah pisanan ngasilake nol, sing nuduhake eksekusi sing sukses, printah ing blok pisanan bakal dieksekusi then, Yen ora, yen kondisi pisanan iku palsu, lan yen printah kapindho ngasilake nul, pemblokiran kaloro kode bakal kaleksanan.
#!/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
Ing skrip kasebut, sampeyan bisa, umpamane, nggawe pangguna anyar nggunakake perintah kasebut useradd, yen panelusuran ora ngasilake asil, utawa nindakake tindakan liya sing migunani.
Perbandingan Nomer
Ing skrip, sampeyan bisa mbandhingake nilai numerik. Ing ngisor iki dhaptar prentah sing cocog.
n1 -eq n2Ngasilake bener yen n1 podo karo n2. n1 -ge n2 Ngasilake bener yen n1luwih utawa padha n2. n1 -gt n2Ngasilake bener yen n1 luwih saka n2. n1 -le n2Ngasilake bener yen n1kurang utawa padha n2. n1 -lt n2Ngasilake bener yen n1 kurang saka n2. n1 -ne n2Ngasilake bener yen n1ora padha n2.
Minangka conto, ayo nyoba salah sawijining operator perbandingan. Elinga yen ekspresi kasebut dilampirake ing tanda kurung.
#!/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
Punika printah iki bakal output.
Mbandhingake angka ing skrip
Nilai variabel val1luwih saka 5, pungkasanipun cabang kaleksanan thenoperator comparison lan pesen sing cocog ditampilake ing console.
Perbandingan string
Skrip uga bisa mbandhingake nilai senar. Operator comparison katon cukup prasaja, nanging operator comparison string duwe peculiarities tartamtu, kang bakal kita tutul ing ngisor iki. Punika dhaptar operator.
str1 = str2 Tes strings kanggo kesetaraan, bali bener yen strings padha.
str1 != str2Ngasilake bener yen strings ora identik. str1 < str2Ngasilake bener yen str1kurang saka str2. str1 > str2 Ngasilake bener yen str1luwih saka str2. -n str1 Ngasilake bener yen dawa str1Ndhuwur nul. -z str1Ngasilake bener yen dawa str1padha karo nul.
Iki minangka conto perbandingan string ing skrip:
#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user is the current logged in user"
fi
Minangka asil saka eksekusi skrip, kita entuk ing ngisor iki.
Perbandingan String ing Skrip
Iki minangka salah sawijining fitur perbandingan string sing kudu dicritakake. Yaiku, operator ">" lan "<" kudu oncat nganggo garis miring terbalik, yen ora, skrip ora bakal bisa digunakake kanthi bener, sanajan ora ana pesen kesalahan sing bakal katon. Skrip nerjemahake tandha ">" minangka prentah kanggo ngarahake output.
Mangkene carane nggarap operator kasebut katon ing kode:
#!/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
Iki minangka asil saka naskah.
Perbandingan string, peringatan dibuwang
Elinga yen skrip, sanajan wis dieksekusi, menehi peringatan:
./myscript: line 5: [: too many arguments
Kanggo nyingkirake bebaya iki, kita nyimpulake $val2 ing kuotasi kaping pindho:
#!/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
Saiki kabeh bisa digunakake kaya sing dikarepake.
Perbandingan string
Fitur liyane saka operator ">" lan "<" yaiku cara kerjane karo karakter huruf gedhe lan huruf cilik. Kanggo mangerteni fitur iki, ayo nyiyapake file teks kanthi isi ing ngisor iki:
Likegeeks
likegeeks
Simpen nganggo jeneng myfilebanjur jalanake printah ing ngisor iki ing terminal:
sort myfile
Bakal ngurutake baris saka file kaya mangkene:
likegeeks
Likegeeks
tim sort, minangka standar, ngurutake senar kanthi urutan munggah, tegese huruf cilik ing conto kita luwih cilik tinimbang huruf gedhe. Saiki ayo nyiyapake skrip sing bakal mbandhingake senar sing padha:
#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi
Yen sampeyan mbukak, pranyata yen kosok balene - huruf cilik saiki luwih gedhe tinimbang huruf gedhe.
urutan printah lan string comparison ing file script
Ing prentah mbandhingake, huruf gedhe luwih cilik tinimbang huruf cilik. Perbandingan string ing kene ditindakake kanthi mbandhingake kode karakter ASCII, urutan urutane gumantung marang kode karakter.
tim sort, ing siji, nggunakake urutan urutan sing ditemtokake ing setelan basa sistem.
Priksa file
Mungkin printah ing ngisor iki asring digunakake ing skrip bash. Dheweke ngidini sampeyan mriksa macem-macem kahanan babagan file. Punika dhaptar printah iki.
-d filePriksa manawa file ana lan yen iku direktori. -e filePriksa manawa ana file. -f file Priksa manawa ana file lan manawa file kasebut. -r filePriksa manawa file kasebut ana lan bisa diwaca. -s file ΠPriksa manawa file kasebut ana lan ora kosong. -w filePriksa manawa file kasebut ana lan bisa ditulis. -x filePriksa manawa file ana lan bisa dieksekusi. file1 -nt file2 Priksa manawa luwih anyar file1saka file2. file1 -ot file2Priksa yen lawas file1saka file2. -O file Priksa manawa file kasebut ana lan diduweni dening pangguna saiki. -G filePriksa manawa file kasebut ana lan yen ID grup cocog karo ID grup pangguna saiki.
Prentah iki, uga akeh liyane sing dibahas saiki, gampang dieling-eling. Jeneng-jenenge, minangka singkatan kanggo macem-macem tembung, langsung nuduhake cek sing ditindakake.
Ayo coba salah sawijining prentah ing praktik:
#!/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 iki, kanggo direktori sing wis ana, bakal nampilake isine.
Listing isi direktori
Kita pitados bilih sampeyan bisa eksprimen karo liyane saka printah ing dhewe, kabeh padha ditrapake miturut prinsip padha.
Hasil
Dina iki kita ngomong babagan carane miwiti nulis skrip bash lan nutupi sawetara perkara dhasar. Nyatane, topik pemrograman bash gedhe banget. Artikel iki minangka terjemahan saka bagean pisanan saka seri gedhe saka 11 materi. Yen sampeyan pengin nerusake sapunika, iki minangka dhaptar asli saka bahan kasebut. Kanggo penak, sing terjemahane wis sampeyan waca wis kalebu ing kene.
Bash Script Step By Step - ing kene kita ngomong babagan carane miwiti nggawe skrip bash, panggunaan variabel dianggep, konstruksi kondisional, kalkulasi, mbandhingake angka, senar, nemokake informasi babagan file diterangake.
Bash Scripting Part 3, Parameter & opsi - materi iki dikhususake kanggo paramèter lan tombol baris perintah sing bisa dikirim menyang skrip, nggarap data sing dilebokake pangguna lan bisa diwaca saka file.
Bash Scripting Part 4, Input & Output - ing kene kita ngomong babagan deskriptor file lan nggarap, babagan input, output, kesalahan, stream redirection output.
Bash Scripting Part 11, Ngarepake Command - materi iki darmabakti kanggo alat Nyana, karo sampeyan bisa ngotomatisasi interaksi karo keperluan interaktif. Utamane, iki babagan nyana skrip lan cara interaksi karo skrip bash lan program liyane.
Para maos ingkang minulya! Kita takon guru pemrograman bash kanggo ngomong babagan carane dheweke entuk tingkat penguasaan, nuduhake rahasia, lan kita ngenteni tayangan saka wong-wong sing nembe nulis naskah pertama.
Mung pangguna pangguna sing bisa melu survey. mlebunggih.