Dinten ieu kami bakal ngobrol ngeunaan skrip bash. Ieu- skrip baris paréntah, ditulis pikeun cangkang bash. Aya cangkang anu sanés sapertos zsh, tcsh, ksh, tapi urang bakal difokuskeun bash. Bahan ieu dimaksudkeun pikeun sadayana, hiji-hijina kaayaan nyaéta kamampuan pikeun dianggo garis paréntah Linux.
Skrip garis paréntah mangrupikeun kumpulan paréntah anu sami anu tiasa diasupan tina keyboard, dikumpulkeun kana file sareng dihijikeun ku sababaraha tujuan umum. Dina hal ieu, hasil pagawéan tim tiasa janten nilai mandiri atanapi janten data input pikeun tim sanés. Skrip mangrupikeun cara anu ampuh pikeun ngajadikeun otomatis tindakan anu sering dilakukeun.
Janten, upami urang nyarioskeun garis paréntah, éta ngamungkinkeun anjeun ngalaksanakeun sababaraha paréntah sakaligus ku cara nuliskeunana anu dipisahkeun ku titik koma:
pwd ; whoami
Kanyataanna, upami anjeun nyobian ieu dina terminal anjeun, skrip bash munggaran anjeun anu ngalibetkeun dua paréntah parantos ditulis. Gawéna kawas kieu. Tim kahiji pwd mintonkeun informasi ngeunaan diréktori gawé ayeuna, lajeng paréntah whoaminembongkeun informasi ngeunaan pamaké anjeun asup salaku.
Ngagunakeun pendekatan ieu, anjeun bisa ngagabungkeun saloba paréntah sakumaha anjeun resep dina hiji garis, hijina wates nyaéta jumlah maksimum argumen nu bisa dibikeun ka program. Anjeun tiasa netepkeun wates ieu nganggo paréntah di handap ieu:
getconf ARG_MAX
Garis paréntah mangrupikeun alat anu saé, tapi anjeun kedah ngalebetkeun paréntah kana unggal waktos anjeun peryogina. Kumaha upami urang nyerat sakumpulan paréntah kana file sareng ngan saukur nyauran file éta pikeun ngalaksanakeunana? Nyatana, file anu urang bahas disebut skrip baris paréntah.
Kumaha skrip bash jalan
Jieun file kosong nganggo paréntah touch. Baris kahiji na kedah nunjukkeun cangkang mana anu bakal kami anggo. Urang museurkeun bash, jadi baris kahiji file bakal kieu:
#!/bin/bash
Garis séjén dina file ieu nganggo simbol hash pikeun nunjukkeun koméntar yén cangkang henteu diolah. Tapi, baris kahiji mangrupa kasus husus, aya hash dituturkeun ku tanda seru (urutan ieu disebut seblak) jeung jalan ka bash, nunjukkeun ka sistem anu skrip dijieun husus pikeun bash.
Paréntah cangkang dipisahkeun ku feed garis, komentar dipisahkeun ku tanda Hash. Ieu anu katingalina:
#!/bin/bash
# This is a comment
pwd
whoami
Di dieu, kawas dina garis paréntah, Anjeun bisa nulis paréntah dina hiji baris, dipisahkeun ku titik koma. Nanging, upami anjeun nyerat paréntah dina garis anu béda, filena langkung gampang dibaca. Dina sagala hal, cangkang bakal ngolah aranjeunna.
Nyetél idin file skrip
Simpen file anu masihan nami myscript, sareng padamelan nyiptakeun skrip bash ampir réngsé. Ayeuna sadayana anu tetep nyaéta ngajantenkeun file ieu tiasa dieksekusi, upami anjeun nyobian ngajalankeun éta, anjeun bakal mendakan kasalahan. Permission denied.
Nyobian ngajalankeun file skrip sareng idin anu teu leres dikonpigurasi
Hayu urang ngadamel file tiasa dieksekusi:
chmod +x ./myscript
Ayeuna hayu urang coba laksanakeun:
./myscript
Sanggeus netepkeun idin sagalana jalan sakumaha sakuduna.
Suksés ngajalankeun skrip bash
Kaluaran pesen
Pikeun kaluaran téks kana konsol Linux, paké paréntahna echo. Hayu urang nganggo pangaweruh kanyataan ieu sareng ngédit naskah urang, nambihan panjelasan kana data anu dikaluarkeun ku paréntah anu aya di dinya:
#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoami
Ieu naon kajadian sanggeus ngajalankeun skrip diropéa.
Outputting pesen tina naskah
Ayeuna urang tiasa ningalikeun catetan panjelasan nganggo paréntah echo. Upami anjeun henteu terang kumaha ngédit file nganggo alat Linux, atanapi anjeun henteu acan ningali paréntahna sateuacanna echo, tingalian ieu barang.
Ngagunakeun Variabel
Variabel ngamungkinkeun anjeun pikeun nyimpen inpormasi dina file skrip, sapertos hasil paréntah, pikeun dianggo ku paréntah anu sanés.
Teu aya anu lepat sareng ngalaksanakeun paréntah individu tanpa nyimpen hasilna, tapi pendekatan ieu rada terbatas dina kamampuanna.
Aya dua jinis variabel anu tiasa dianggo dina skrip bash:
Variabel Lingkungan
Variabel pamaké
Variabel Lingkungan
Kadang-kadang paréntah cangkang kedah dianggo sareng sababaraha data sistem. Ieu conto kumaha cara nampilkeun diréktori bumi pangguna ayeuna:
#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"
Punten dicatet yén urang tiasa nganggo variabel sistem $HOME dina tanda petik ganda, ieu moal nyegah sistem ti recognizing eta. Ieu anu anjeun kéngingkeun upami anjeun ngajalankeun skenario di luhur.
Ngagunakeun variabel lingkungan dina naskah
Tapi kumaha upami anjeun kedah nunjukkeun tanda dolar dina layar? Hayu urang coba ieu:
echo "I have $1 in my pocket"
Sistim bakal ngadeteksi tanda dollar dina string dicutat sarta nganggap yén kami geus referenced variabel. Skrip bakal nyoba nembongkeun nilai variabel undefined $1. Ieu sanés anu urang peryogikeun. Naon anu kedah dilakukeun?
Dina kaayaan ieu, ngagunakeun karakter ngewa, backslash a, saméméh tanda dollar bakal mantuan:
echo "I have $1 in my pocket"
Skrip ayeuna bakal ngahasilkeun naon anu dipiharep.
Ngagunakeun runtuyan ngewa ka print tanda dollar
Variabel pamaké
Salian variabel lingkungan, skrip bash ngamungkinkeun anjeun pikeun ngartikeun sareng nganggo variabel anjeun sorangan dina naskah. Variabel sapertos nahan nilai dugi ka skrip réngsé palaksanaan.
Sapertos variabel sistem, variabel pangguna tiasa diaksés nganggo tanda dolar:
TNW-CUS-FMP - kode promo pikeun diskon 10% dina jasa kami, sadia pikeun aktivasina dina 7 poé
#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"
Ieu naon anu lumangsung saatos ngajalankeun skrip sapertos kitu.
Variabel Adat dina Skrip
Paréntah Substitusi
Salah sahiji fitur anu pang gunana tina skrip bash nyaéta kamampuan nimba inpormasi tina kaluaran paréntah sareng napelkeun kana variabel, ngamungkinkeun anjeun ngagunakeun inpormasi ieu dimana waé dina file skrip.
Aya dua cara pikeun ngalakukeun ieu.
Ngagunakeun backtick "`"
Ku rarancang $()
Nalika nganggo pendekatan anu munggaran, ati-ati henteu ngalebetkeun tanda petik tunggal pikeun ngagentos backtick. Paréntahna kedah ditutupan dina dua ikon sapertos kieu:
mydir=`pwd`
Dina pendekatan kadua, hal anu sami ditulis sapertos kieu:
mydir=$(pwd)
Sareng naskahna tiasa katingali sapertos kieu:
#!/bin/bash
mydir=$(pwd)
echo $mydir
Salila operasi na, kaluaran paréntah pwdbakal disimpen dina variabel mydir, nu eusina, maké paréntah echo, bakal balik kana konsol nu.
Skrip anu nyimpen hasil paréntah dina variabel
Operasi matematik
Pikeun ngalakukeun operasi matematik dina file skrip, anjeun tiasa nganggo konstruksi sapertos $((a+b)):
Dina sababaraha skénario, anjeun kedah ngontrol aliran palaksanaan paréntah. Contona, upami hiji nilai nu tangtu leuwih gede ti lima, Anjeun kudu ngalakukeun hiji aksi, disebutkeun, nu sejen. Ieu lumaku dina loba kaayaan, sarta di dieu struktur kontrol bakal nulungan urang if-then. Dina bentuk pangbasajanna sigana kieu:
if команда
then
команды
fi
Ieu conto anu tiasa dianggo:
#!/bin/bash
if pwd
then
echo "It works"
fi
Dina hal ieu, lamun paréntah dieksekusi pwdbakal ngalengkepan suksés, téks "gawéna" bakal dipintonkeun dina konsol nu.
Hayu urang nganggo pangaweruh anu urang gaduh sareng nyerat naskah anu langkung kompleks. Anggap urang kedah milarian pangguna anu tangtu /etc/passwd, sareng upami anjeun tiasa mendakanana, laporkeun yén éta aya.
#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi
Ieu naon kajadian sanggeus ngajalankeun skrip ieu.
Pilarian pamaké
Di dieu kami nganggo paréntah greppikeun milarian pangguna dina file /etc/passwd. Lamun tim grepteu wawuh ka anjeun, pedaran na bisa kapanggih di dieu.
Dina conto ieu, lamun pamaké kapanggih, naskah bakal mintonkeun pesen pakait. Kumaha lamun pamaké teu bisa kapanggih? Dina hal ieu, naskah saukur bakal ngalengkepan palaksanaan tanpa ngabejaan urang nanaon. Simkuring hoyong anjeunna ngabejaan urang ngeunaan ieu ogé, sangkan bakal ningkatkeun kode.
lamun-lajeng-sejenna kontrol ngawangun
Dina raraga program bisa ngalaporkeun duanana hasil pilarian suksés tur gagalna, urang bakal ngagunakeun konstruksi if-then-else. Ieu kumaha jalanna:
if команда
then
команды
else
команды
fi
Upami paréntah anu munggaran ngabalikeun nol, anu hartosna éta suksés dieksekusi, kaayaan éta bakal leres sareng palaksanaan moal lumangsung sapanjang cabang. else. Upami teu kitu, lamun hal lian ti enol geus balik, nu bakal nunjukkeun gagalna, atawa hasil palsu, paréntah sanggeus else.
Hayu urang nyerat skrip ieu:
#!/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 na turun ka solokan else.
Ngajalankeun skrip sareng konstruksi upami-lajeng-sejenna
Nya, hayu urang teraskeun sareng naroskeun ka diri urang ngeunaan kaayaan anu langkung kompleks. Kumaha upami anjeun kedah pariksa sanés hiji kaayaan, tapi sababaraha? Salaku conto, upami pangguna anu dipikahoyong kapendak, hiji pesen kedah ditampilkeun, upami sarat anu sanés kacumponan, pesen anu sanés kedah ditampilkeun, sareng saterasna. Dina kaayaan kitu, kaayaan nested bakal nulungan urang. Sigana mah kieu:
if команда1
then
команды
elif команда2
then
команды
fi
Upami paréntah anu munggaran ngabalikeun nol, anu nunjukkeun palaksanaan anu suksés, paréntah di blok kahiji bakal dieksekusi. then, Upami teu kitu, lamun kaayaan kahiji palsu sarta lamun paréntah kadua mulih enol, blok kadua kode bakal dieksekusi.
#!/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
Dina naskah sapertos kitu, anjeun tiasa, contona, nyiptakeun pangguna énggal nganggo paréntah useradd, lamun pilarian teu ngahasilkeun hasil, atawa ngalakukeun hal sejenna mangpaat.
Babandingan angka
Dina naskah anjeun tiasa ngabandingkeun nilai numerik. Di handap ieu daptar paréntah relevan.
n1 -eq n2Mulih leres lamun n1 sarua n2. n1 -ge n2 Mulih leres lamun n1leuwih atawa sarua n2. n1 -gt n2Mulih leres lamun n1 badag n2. n1 -le n2Mulih leres lamun n1kurang atawa sarua n2. n1 -lt n2Mulih leres lamun n1 kirang ti n2. n1 -ne n2Mulih leres lamun n1teu sami n2.
Salaku conto, hayu urang coba salah sahiji operator ngabandingkeun. Catet yén éksprési dikurung dina kurung kuadrat.
#!/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
Ieu naon paréntah ieu bakal kaluaran.
Babandingan angka dina naskah
Nilai variabel val1leuwih gede ti 5, cabang ends up keur dieksekusi thenoperator ngabandingkeun sarta pesen pakait dipintonkeun dina konsol nu.
Babandingan string
Skrip ogé bisa ngabandingkeun nilai string. operator ngabandingkeun kasampak cukup basajan, tapi operasi ngabandingkeun string gaduh fitur nu tangtu, nu urang bakal noél handap. Ieu daptar operator.
str1 = str2 Tés string pikeun sarua, balik leres lamun string anu idéntik.
str1 != str2Mulih leres upami senar henteu idéntik. str1 < str2Mulih leres lamun str1kirang ti str2. str1 > str2 Mulih leres lamun str1langkung ti str2. -n str1 Mulih leres lamun panjang str1Luhureun enol. -z str1Mulih leres lamun panjang str1sarua jeung nol.
Ieu conto ngabandingkeun string dina naskah:
#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user is the current logged in user"
fi
Salaku hasil tina executing naskah, urang meunang handap.
Ngabandingkeun string dina naskah
Ieu salah sahiji fitur tina perbandingan string anu patut disebatkeun. Nyaéta, operator ">" sareng "<" kedah kabur nganggo garis miring terbalik, upami henteu naskahna moal jalan leres, sanaos henteu aya pesen kasalahan anu bakal muncul. Skrip napsirkeun tanda ">" salaku paréntah alihan kaluaran.
Ieu naon anu dianggo sareng operator ieu sapertos dina 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
Ieu hasil naskah.
Babandingan string, warning dibikeun
Punten dicatet yén naskah, sanaos dieksekusi, ngaluarkeun peringatan:
./myscript: line 5: [: too many arguments
Pikeun ngaleungitkeun peringatan ieu, urang nyimpulkeun $val2 dina tanda petik ganda:
#!/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
Ayeuna sagalana jalan sakumaha sakuduna.
Babandingan string
Fitur séjén tina operator ">" sareng "<" nyaéta kumaha aranjeunna tiasa dianggo sareng hurup ageung sareng hurup leutik. Pikeun ngartos fitur ieu, hayu urang nyiapkeun file téks sareng eusi ieu:
Likegeeks
likegeeks
Hayu urang simpen ku méré ngaran myfile, teras jalankeun paréntah di handap ieu dina terminal:
sort myfile
Bakal nyortir garis tina file sapertos kieu:
likegeeks
Likegeeks
regu sort, Sacara standar, sorts string dina urutan naek, nyaeta, hurup leutik dina conto urang leuwih leutik batan hiji uppercase. Ayeuna hayu urang nyiapkeun skrip anu bakal ngabandingkeun senar anu sami:
#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi
Upami anjeun ngajalankeun éta, tétéla yén sadayana sabalikna - hurup leutik ayeuna langkung ageung tibatan anu ageung.
Paréntah asihan sareng ngabandingkeun senar dina file skrip
Dina paréntah babandingan, hurup uppercase leuwih leutik batan hurup leutik. Perbandingan string di dieu dilakukeun ku ngabandingkeun kode ASCII karakter, urutan diurutkeun ku kituna gumantung kana kode karakter.
regu sort, dina gilirannana, ngagunakeun urutan sortir dieusian dina setélan basa sistem.
Cék file
Panginten paréntah di handap ieu sering dianggo dina skrip bash. Éta ngamungkinkeun anjeun mariksa sababaraha kaayaan ngeunaan file. Ieu daptar paréntah ieu.
-d filePariksa naha file aya sareng mangrupikeun diréktori. -e filePariksa lamun file aya. -f file Pariksa naha file aya sareng file. -r filePariksa naha file aya sareng tiasa dibaca. -s file ПPariksa naha file aya sareng henteu kosong. -w filePariksa naha file aya sareng tiasa ditulis. -x filePariksa naha file aya sareng tiasa dieksekusi. file1 -nt file2 Pariksa lamun éta leuwih anyar file1tibatan file2. file1 -ot file2Cék lamun heubeul file1tibatan file2. -O file Pariksa naha file éta aya sareng dipiboga ku pangguna ayeuna. -G filePariksa naha file aya sareng naha ID grup na cocog sareng ID grup pangguna ayeuna.
Paréntah ieu, kitu ogé seueur anu dibahas ayeuna, gampang diinget. Ngaranna, singgetan tina rupa-rupa kecap, langsung nunjukkeun cék anu aranjeunna lakukeun.
Hayu urang coba salah sahiji paréntah dina prakna:
#!/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 ieu, pikeun diréktori anu tos aya, bakal mintonkeun eusina.
Listing eusi diréktori a
Kami yakin yén anjeun tiasa ékspérimén sareng sésa paréntah nyalira; aranjeunna sadayana dianggo dumasar kana prinsip anu sami.
hasil
Dinten ieu kami ngobrol ngeunaan kumaha ngamimitian nulis skrip bash sareng nutupan sababaraha hal dasar. Kanyataanna, topik programming bash badag. Artikel ieu mangrupa tarjamahan tina bagian kahiji tina runtuyan badag tina 11 bahan. Upami anjeun badé neraskeun ayeuna, ieu mangrupikeun daptar asli bahan ieu. Pikeun genah, tarjamahan anu anjeun baca parantos kalebet di dieu.
Bash Script Lengkah-demi-Lengkah - Di dieu urang ngobrol ngeunaan kumaha carana ngamimitian nyieun skrip bash, pamakéan variabel dianggap, struktur kondisional, itungan, ngabandingkeun angka, string, sarta manggihan informasi ngeunaan file digambarkeun.
Bash Scripting Bagian 3, Parameter & pilihan - bahan ieu devoted kana parameter garis paréntah sarta konci nu bisa dibikeun ka Aksara, gawé bareng data nu pamaké diasupkeun tur nu bisa dibaca tina file.
Bash Scripting Bagian 4, Input & Output - Di dieu urang ngobrol ngeunaan deskriptor file sareng damel sareng aranjeunna, ngeunaan input, output, aliran kasalahan, sareng ngeunaan alihan kaluaran.
Bash Scripting Bagian 6, Fungsi — Di dieu anjeun tiasa diajar ngeunaan nyiptakeun sareng ngagunakeun fungsi dina naskah sareng ngembangkeun perpustakaan.
Bash Scripting Bagian 11, Nyangka Komando - bahan ieu dedicated ka alat ekspektasi, kalawan nu bisa ngajadikeun otomatis interaksi jeung Utiliti interaktif. Khususna, urang ngobrol ngeunaan ekspektasi naskah sareng interaksina sareng skrip bash sareng program anu sanés.
Kami yakin yén salah sahiji fitur anu berharga tina séri tulisan ieu nyaéta, mimitian ti anu pangbasajanna, cocog pikeun pangguna tingkat naon waé, éta laun-laun nyababkeun topik anu cukup serius, masihan sadayana kasempetan pikeun maju dina nyiptakeun skrip garis paréntah Linux. .
pamiarsa Hormat! Kami naroskeun ka guru pemrograman bash pikeun nyarioskeun kumaha aranjeunna ngahontal jangkung penguasaanna, bagikeun rusiahna, sareng kami ngarepkeun nampi tayangan ti anu nembé nyerat naskah munggaran.
Ngan pamaké nu kadaptar bisa ilubiung dina survey. Daptar, Punten.
Naha kuring kedah narjamahkeun sésa-sésa séri artikel?