Aksara Bash: mimiti

Aksara Bash: mimiti
Aksara Bash Bagian 2: Loops
Skrip Bash, Bagian 3: Pilihan Jalur Komando sareng Saklar
Bash Scripts Part 4: Input sareng Output
Skrip Bash, Bagian 5: Sinyal, Tugas Latar, Manajemén Skrip
Bash Scripts, Bagian 6: Fungsi sareng Pangwangunan Perpustakaan
Bash Scripts, Bagian 7: sed sareng Word Processing
Skrip Bash, bagian 8: basa ngolah data awk
Aksara Bash Bagian 9: Babasan Biasa
Bash Scripts Bagian 10: Conto Praktis
Skrip Bash, bagian 11: ngaharepkeun sareng otomatisasi utilitas interaktif

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.

Aksara Bash: mimiti

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.

Aksara Bash: mimiti

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.

Aksara Bash: mimiti
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.

Aksara Bash: mimiti
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.

Aksara Bash: mimiti
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.

Aksara Bash: mimiti
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.

Aksara Bash: mimiti
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.

Aksara Bash: mimiti
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.

Aksara Bash: mimiti
Skrip anu nyimpen hasil paréntah dina variabel

Operasi matematik

Pikeun ngalakukeun operasi matematik dina file skrip, anjeun tiasa nganggo konstruksi sapertos $((a+b)):

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

Aksara Bash: mimiti
Operasi Matematika dina Naskah

lamun-lajeng kontrol ngawangun

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.

Aksara Bash: mimiti
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.

Aksara Bash: mimiti
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.

Aksara Bash: mimiti
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.

Aksara Bash: mimiti
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.

Aksara Bash: mimiti
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.

Aksara Bash: mimiti
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.

Aksara Bash: mimiti
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.

Aksara Bash: mimiti
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.

  1. 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.
  2. Bash Scripting Bagian 2, Bash nu Heboh - di dieu fitur gawé bareng for jeung bari loop anu wangsit.
  3. 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.
  4. 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.
  5. Bash Scripting Bagian 5, Sighals & Jobs — bahan ieu dikhususkeun pikeun sinyal Linux, ngolahna dina skrip, sareng ngaluncurkeun skrip dina jadwal.
  6. Bash Scripting Bagian 6, Fungsi — Di dieu anjeun tiasa diajar ngeunaan nyiptakeun sareng ngagunakeun fungsi dina naskah sareng ngembangkeun perpustakaan.
  7. Bash Scripting Bagian 7, Ngagunakeun sed — Tulisan ieu dikhususkeun pikeun damel sareng pangropéa téksu streaming sed.
  8. Bash Scripting Bagian 8, Ngagunakeun awk - bahan ieu devoted kana programming dina basa processing data awk.
  9. Bash Scripting Bagian 9, Babasan Biasa - Di dieu anjeun tiasa maca ngeunaan ngagunakeun ekspresi biasa dina skrip bash.
  10. Bash Scripting Bagian 10, Conto Praktis — Ieu mangrupikeun téknik pikeun damel sareng pesen anu tiasa dikirim ka pangguna, ogé metode pikeun ngawas disk.
  11. 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.

Aksara Bash: mimiti

Ngan pamaké nu kadaptar bisa ilubiung dina survey. Daptar, Punten.

Naha kuring kedah narjamahkeun sésa-sésa séri artikel?

  • Sumuhun!

  • Teu perlu

1030 pamaké milih. 106 pamaké abstained.

sumber: www.habr.com

Tambahkeun komentar