Bash Scripts: kòmansman an

Bash Scripts: kòmansman an
Bash Scripts Pati 2: Boucles
Bash Scripts, Pati 3: Opsyon liy kòmand ak switch
Bash Scripts Pati 4: Antre ak Sòti
Bash Scripts, Pati 5: Siyal, Travay background, Jesyon Script
Bash Scripts, Pati 6: Fonksyon ak Devlopman Bibliyotèk
Bash Scripts, Pati 7: sed ak pwosesis mo
Bash Scripts, pati 8: awk done pwosesis lang
Bash Scripts Pati 9: Ekspresyon regilye
Bash Scripts Pati 10: Egzanp Pratik
Bash Scripts, pati 11: atann ak automatisation nan sèvis piblik entèaktif

Jodi a nou pral pale sou scripts bash. Sa a - script liy lòd, ekri pou koki a bash. Gen lòt kokiy tankou zsh, tcsh, ksh, men nou pral konsantre sou bash. Materyèl sa a fèt pou tout moun, kondisyon an sèlman se kapasite nan travay nan liy lòd Linux.

Bash Scripts: kòmansman an

Scripts liy kòmand yo se koleksyon kòmandman yo menm ki ka antre nan klavye a, kolekte nan dosye ak ini pa kèk objektif komen. Nan ka sa a, rezilta yo nan travay ekip yo ka swa gen yon valè endepandan oswa sèvi kòm done opinyon pou lòt ekip. Scripts yo se yon fason pwisan otomatize aksyon yo fè souvan.

Bash Scripts: kòmansman an

Se konsa, si nou pale sou liy kòmand la, li pèmèt ou egzekite plizyè kòmandman an menm tan lè w antre yo separe pa yon pwen-virkil:

pwd ; whoami

An reyalite, si ou te eseye sa a nan tèminal ou a, premye script bash ou a ki enplike de kòmandman te deja ekri. Li travay konsa. Ekip premye pwd montre enfòmasyon sou anyè k ap travay kounye a, Lè sa a, lòd la whoamimontre enfòmasyon sou itilizatè a ou ouvri sesyon an.

Sèvi ak apwòch sa a, ou ka konbine kòmandman anpil jan ou renmen sou yon sèl liy, limit la sèlman se kantite maksimòm agiman ki ka pase nan pwogram nan. Ou ka defini limit sa a lè l sèvi avèk lòd sa a:

getconf ARG_MAX

Liy lòd la se yon gwo zouti, men ou dwe antre nan kòmandman yo chak fwa ou bezwen yo. E si nou te ekri yon seri kòmandman nan yon dosye epi tou senpleman rele dosye sa a pou egzekite yo? An reyalite, dosye n ap pale a rele yon script liy kòmand.

Ki jan scripts bash travay

Kreye yon dosye vid lè l sèvi avèk kòmandman an touch. Premye liy li yo bezwen endike ki kokiy nou pral itilize. Nou enterese nan bash, kidonk premye liy dosye a pral:

#!/bin/bash

Lòt liy nan dosye sa a sèvi ak senbòl hash la pou endike kòmantè ke koki a pa trete. Sepandan, premye liy lan se yon ka espesyal, gen yon hash ki te swiv pa yon mak esklamasyon (sekans sa a rele shebang) ak chemen pou bash, endike sistèm lan ke script la te kreye espesyalman pou bash.

Kòmandman Shell yo separe pa yon liy manje, kòmantè yo separe pa yon siy hash. Men sa li sanble:

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

Isit la, jis tankou sou liy lòd la, ou ka ekri kòmandman sou yon sèl liy, separe pa pwen virgul. Sepandan, si ou ekri kòmandman yo sou liy diferan, dosye a pi fasil pou li. Nan nenpòt ka, koki a pral trete yo.

Mete otorizasyon pou fichye script

Sove fichye a bay li yon non myscript, ak travay la nan kreye script la bash prèske fini. Koulye a, tout sa ki rete se fè dosye sa a ègzèkutabl, otreman, si ou eseye kouri li, ou pral rankontre yon erè. Permission denied.

Bash Scripts: kòmansman an
Eseye kouri yon dosye script ak otorizasyon mal configuré

Ann fè dosye a ègzekutabl:

chmod +x ./myscript

Koulye a, ann eseye egzekite li:

./myscript

Apre mete otorizasyon yo tout bagay ap travay jan li ta dwe.

Bash Scripts: kòmansman an
Siksè kouri script bash

Pwodiksyon mesaj

Pou pwodiksyon tèks nan konsole Linux la, sèvi ak lòd la echo. Ann sèvi ak konesans nan reyalite sa a epi modifye script nou an, ajoute eksplikasyon sou done yo ki soti nan kòmandman yo deja nan li:

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

Sa a se sa k ap pase apre kouri script la mete ajou.

Bash Scripts: kòmansman an
Pwodiksyon mesaj ki soti nan yon script

Koulye a, nou ka montre nòt eksplikasyon lè l sèvi avèk kòmandman an echo. Si ou pa konnen ki jan yo modifye yon dosye lè l sèvi avèk zouti Linux, oswa ou pa te wè kòmandman an anvan echo, pran yon gade nan sa a bagay la.

Sèvi ak Varyab

Varyab pèmèt ou estoke enfòmasyon nan yon dosye script, tankou rezilta kòmandman, pou itilize pa lòt kòmandman.

Pa gen anyen ki mal ak egzekite kòmandman endividyèl san yo pa estoke rezilta yo, men apwòch sa a se byen limite nan kapasite li yo.

Gen de kalite varyab ki ka itilize nan scripts bash:

  • Varyab Anviwònman
  • Varyab itilizatè

Varyab Anviwònman

Pafwa kòmandman koki yo bezwen travay ak kèk done sistèm. Men yon egzanp sou fason pou montre anyè lakay itilizatè aktyèl la:

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

Tanpri sonje ke nou ka itilize yon varyab sistèm $HOME an doub quotes, sa p ap anpeche sistèm nan rekonèt li. Sa a se sa ou jwenn si ou kouri senaryo ki anwo a.

Bash Scripts: kòmansman an
Sèvi ak yon varyab anviwònman nan yon script

Men, e si ou bezwen montre yon siy dola sou ekran an? Ann eseye sa a:

echo "I have $1 in my pocket"

Sistèm nan pral detekte yon siy dola nan yon fisèl site epi asime ke nou te referans yon varyab. Script la pral eseye montre valè yon varyab ki pa defini $1. Sa a se pa sa nou bezwen. Kisa pou fe?

Nan sitiyasyon sa a, lè l sèvi avèk karaktè chape a, yon backslash, anvan siy dola a pral ede:

echo "I have $1 in my pocket"

Script la pral kounye a pwodiksyon egzakteman sa yo espere.

Bash Scripts: kòmansman an
Sèvi ak yon sekans chape pou enprime yon siy dola

Varyab itilizatè

Anplis varyab anviwònman yo, scripts bash pèmèt ou defini epi sèvi ak varyab pwòp ou a nan script la. Varyab sa yo kenbe yon valè jiskaske script la fini ekzekisyon.

Menm jan ak varyab sistèm yo, yo ka jwenn aksè nan varyab itilizatè yo lè l sèvi avèk siy dola a:
TNW-CUS-FMP - Kòd promo pou yon rabè 10% sou sèvis nou yo, ki disponib pou aktivasyon nan 7 jou

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

Sa a se sa k ap pase apre kouri tankou yon script.

Bash Scripts: kòmansman an
Varyab Custom nan yon Script

Sibstitisyon kòmand

Youn nan karakteristik ki pi itil nan scripts bash se kapasite nan ekstrè enfòmasyon ki soti nan pwodiksyon lòd epi bay li nan varyab, ki pèmèt ou sèvi ak enfòmasyon sa a nenpòt kote nan dosye a script.

Gen de fason pou fè sa.

  • Sèvi ak backtick "`" la
  • Pa konsepsyon $()

Lè w ap itilize premye apwòch la, fè atansyon pou pa mete yon sèl guillemets nan plas backtick la. Kòmandman an dwe fèmen nan de ikon sa yo:

mydir=`pwd`

Nan dezyèm apwòch la, menm bagay la ekri tankou sa a:

mydir=$(pwd)

Ak script la ta ka fini sanble tankou sa a:

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

Pandan operasyon li yo, pwodiksyon an nan lòd la pwdpral sove nan yon varyab mydir, sa ki nan ki, lè l sèvi avèk lòd la echo, pral ale nan konsole a.

Bash Scripts: kòmansman an
Yon script ki sove rezilta yo nan yon lòd nan yon varyab

Operasyon matematik

Pou fè operasyon matematik nan yon dosye script, ou ka itilize yon konstwi tankou $((a+b)):

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

Bash Scripts: kòmansman an
Operasyon matematik nan yon script

si-lè sa a kontwòl konstwi

Nan kèk senaryo, ou bezwen kontwole koule nan ekzekisyon lòd. Pou egzanp, si yon sèten valè pi gran pase senk, ou bezwen fè yon aksyon, otreman, yon lòt. Sa a aplikab nan anpil sitiyasyon, epi isit la estrikti kontwòl la ap ede nou if-then. Nan fòm ki pi senp li yo sanble sa a:

if команда
then
команды
fi

Men yon egzanp k ap travay:

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

Nan ka sa a, si lòd la egzekite pwdpral konplete avèk siksè, tèks "li travay" yo pral parèt nan konsole a.

Ann sèvi ak konesans nou genyen an epi ekri yon script ki pi konplèks. Ann di nou bezwen jwenn yon itilizatè sèten nan /etc/passwd, epi si ou te rive jwenn li, rapòte ke li egziste.

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

Sa a se sa k ap pase apre kouri script sa a.

Bash Scripts: kòmansman an
Rechèch itilizatè

Isit la nou te itilize kòmandman an greppou chèche yon itilizatè nan yon dosye /etc/passwd. Si ekip la grepou pa abitye, ou ka jwenn deskripsyon li yo isit la.

Nan egzanp sa a, si yo jwenn itilizatè a, script la pral montre yon mesaj korespondan. E si itilizatè a pa ka jwenn? Nan ka sa a, script la pral tou senpleman konplete ekzekisyon san yo pa di nou anyen. Nou ta renmen li di nou sou sa a tou, kidonk nou pral amelyore kòd la.

si-lè sa-lòt kontwòl konstwi

Nan lòd pou pwogram nan kapab rapòte tou de rezilta yo nan yon rechèch siksè ak echèk, nou pral itilize konstriksyon an if-then-else. Men ki jan li fonksyone:

if команда
then
команды
else
команды
fi

Si premye kòmandman an retounen zewo, ki vle di li te egzekite avèk siksè, kondisyon an pral vre epi egzekisyon an pa pral kontinye sou branch lan. else. Sinon, si yon lòt bagay pase zewo yo retounen, ki ta endike echèk, oswa yon fo rezilta, kòmandman yo apre else.

Ann ekri script sa a:

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

Ekzekisyon li te desann nan drenaj la else.

Bash Scripts: kòmansman an
Kouri yon script ak yon konstriksyon if-then-else

Oke, ann kontinye epi mande tèt nou sou kondisyon ki pi konplèks. E si ou bezwen tcheke pa yon sèl kondisyon, men plizyè? Pou egzanp, si yo jwenn itilizatè a vle, yo ta dwe montre yon mesaj, si gen kèk lòt kondisyon, yo ta dwe parèt yon lòt mesaj, ak sou sa. Nan yon sitiyasyon konsa, kondisyon nich yo ap ede nou. Li sanble sa a:

if команда1
then
команды
elif команда2
then
команды
fi

Si premye kòmandman an retounen zewo, sa ki endike ekzekisyon siksè li yo, yo pral egzekite kòmandman yo nan premye blòk la then, otreman, si premye kondisyon an fo epi si dezyèm kòmandman an retounen zewo, dezyèm blòk kòd la pral egzekite.

#!/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

Nan yon script konsa, ou ka, pou egzanp, kreye yon nouvo itilizatè lè l sèvi avèk lòd la useradd, si rechèch la pa t 'pwodwi rezilta, oswa fè yon lòt bagay itil.

Konparezon nimewo

Nan scripts ou ka konpare valè nimerik. Anba a se yon lis kòmandman ki enpòtan.

n1 -eq n2Retounen vre si n1 egal n2.
n1 -ge n2 Retounen vre si n1plis oswa egal n2.
n1 -gt n2Retounen vre si n1 pi bon n2.
n1 -le n2Retounen vre si n1mwens oswa egal n2.
n1 -lt n2Retounen vre si n1 mwens pase n2.
n1 -ne n2Retounen vre si n1pa egal n2.

Kòm yon egzanp, an n eseye youn nan operatè yo konparezon. Remake byen ke ekspresyon an fèmen nan parantèz kare.

#!/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

Sa a se sa kòmand sa a pral soti.

Bash Scripts: kòmansman an
Konparezon nimewo nan scripts

Valè varyab val1pi gran pase 5, branch lan fini ke yo te egzekite thenoperatè konparezon ak yon mesaj korespondan parèt nan konsole a.

Fich konparezon

Scripts kapab tou konpare valè fisèl. Operatè konparezon yo sanble byen senp, men operasyon konparezon fisèl gen sèten karakteristik, ke nou pral manyen anba a. Isit la se yon lis operatè yo.

str1 = str2 Teste strings pou egalite, retounen vre si strings yo idantik.
str1 != str2Retounen vre si fisèl yo pa idantik.
str1 < str2Retounen vre si str1mwens pase str2.
str1 > str2 Retounen vre si str1plis pase str2.
-n str1 Retounen vre si longè str1Pi wo pase zewo.
-z str1Retounen vre si longè str1egal a zewo.

Men yon egzanp konparezon fisèl nan yon script:

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

Kòm yon rezilta nan egzekite script la, nou jwenn sa ki annapre yo.

Bash Scripts: kòmansman an
Konpare strings nan scripts

Isit la nan yon karakteristik nan konparezon fisèl ki vo mansyone. Savwa, ">" ak "<" operatè yo dwe chape ak yon backslash, otreman script la pa pral travay kòrèkteman, byenke pa gen okenn mesaj erè ap parèt. Script la entèprete siy ">" kòm yon lòd redireksyon pwodiksyon.

Men ki jan travay ak operatè sa yo sanble nan kòd:

#!/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

Men rezilta script la.

Bash Scripts: kòmansman an
Fich konparezon, avètisman bay

Tanpri sonje ke script la, byenke egzekite, bay yon avètisman:

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

Pou debarase m de avètisman sa a, nou konkli $val2 an doub quotes:

#!/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

Koulye a, tout bagay ap travay jan li ta dwe.

Bash Scripts: kòmansman an
Fich konparezon

Yon lòt karakteristik nan operatè yo ">" ak "<" se fason yo travay ak karaktè majiskil ak miniskil. Pou w konprann karakteristik sa a, ann prepare yon dosye tèks ak kontni sa a:

Likegeeks
likegeeks

Ann sove li lè nou ba li yon non myfile, Lè sa a, kouri lòd sa a nan tèminal la:

sort myfile

Li pral klase liy ki soti nan dosye a tankou sa a:

likegeeks
Likegeeks

Ekip sort, pa default, sòt fisèl nan lòd monte, se sa ki, lèt miniskil nan egzanp nou an pi piti pase youn nan majiskil. Koulye a, ann prepare yon script ki pral konpare menm fisèl yo:

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

Si ou kouri li, li sanble ke tout bagay se nan lòt fason alantou - lèt la miniskil se kounye a pi gwo pase yon sèl la majiskil.

Bash Scripts: kòmansman an
Kòmandman an sòt ak konpare strings nan yon dosye script

Nan kòmandman konparezon, lèt majiskil yo pi piti pase lèt miniskil. Se konparezon chèn isit la fè lè w konpare kòd ASCII karaktè yo, lòd la sòt konsa depann sou kòd karaktè yo.

Ekip sort, nan vire, sèvi ak lòd la sòt espesifye nan anviwònman yo lang sistèm.

Chèk dosye yo

Petèt kòmandman sa yo yo itilize pi souvan nan scripts bash. Yo pèmèt ou tcheke kondisyon divès kalite konsènan dosye yo. Men yon lis kòmandman sa yo.

-d fileTcheke si yon fichye egziste epi li se yon anyè.
-e fileTcheke si dosye a egziste.
-f file Tcheke si yon fichye egziste epi li se yon fichye.
-r fileTcheke si fichye a egziste epi li lizib.
-s file ПTcheke si dosye a egziste epi li pa vid.
-w fileTcheke si fichye a egziste epi li ka ekri.
-x fileTcheke si dosye a egziste epi li se ègzekutabl.
file1 -nt file2 Tcheke si li pi nouvo file1pase file2.
file1 -ot file2Tcheke si pi gran file1pase file2.
-O file Tcheke si fichye a egziste epi si itilizatè aktyèl la posede.
-G fileTcheke si dosye a egziste epi si ID gwoup li a matche ak ID gwoup itilizatè aktyèl la.

Kòmandman sa yo, ansanm ak anpil lòt yo diskite jodi a, fasil pou sonje. Non yo, yo te abrevyasyon nan divès mo, dirèkteman endike chèk yo fè.

Ann eseye youn nan kòmandman yo an pratik:

#!/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

Script sa a, pou yon anyè ki deja egziste, pral montre sa li yo.

Bash Scripts: kòmansman an
Lis sa ki nan yon anyè

Nou kwè ke ou ka fè eksperyans ak kòmandman ki rete yo tèt ou; yo tout yo itilize dapre menm prensip la.

Rezilta

Jodi a nou te pale sou ki jan yo kòmanse ekri scripts bash ak kouvri kèk bagay debaz yo. An reyalite, sijè a nan pwogram bash se gwo. Atik sa a se yon tradiksyon premye pati nan yon seri gwo 11 materyèl. Si ou vle kontinye kounye a, isit la se yon lis orijinal materyèl sa yo. Pou konvenyans, tradiksyon ou jis li a enkli isit la.

  1. Bash Script Etap Pa Etap — isit la nou ap pale sou fason yo kòmanse kreye scripts bash, yo konsidere itilizasyon varyab yo, estrikti kondisyonèl, kalkil, konparezon nimewo, fisèl, ak jwenn enfòmasyon sou dosye yo dekri.
  2. Bash Scripting Pati 2, Bash awizom - isit la karakteristik yo nan travay ak pou ak pandan y ap bouk yo revele.
  3. Bash Scripting Pati 3, Paramèt ak opsyon — materyèl sa a konsakre nan paramèt liy lòd ak kle ki ka pase nan scripts, travay ak done ke itilizatè a antre epi ki ka li nan dosye.
  4. Bash Scripting Pati 4, Antre ak Sòti - isit la nou ap pale sou deskriptè dosye ak travay avèk yo, sou opinyon, pwodiksyon, kouran erè, ak sou redireksyon pwodiksyon.
  5. Bash Scripting Pati 5, Sighals & Jobs — materyèl sa a konsakre nan siyal Linux, pwosesis yo nan scripts, ak lanse scripts sou yon orè.
  6. Bash Scripting Pati 6, Fonksyon — la a ou ka aprann sou kreye ak itilize fonksyon nan scripts ak devlope bibliyotèk.
  7. Bash Scripting Pati 7, Sèvi ak sed — atik sa a konsakre nan travay ak editè tèks difizyon sed.
  8. Bash Scripting Pati 8, Sèvi ak awk — se materyèl sa a konsakre nan pwogram nan lang nan pwosesis done awk.
  9. Bash Scripting Pati 9, Ekspresyon regilye — isit la ou ka li sou itilizasyon ekspresyon regilye nan scripts bash.
  10. Bash Scripting Pati 10, Egzanp Pratik — isit la gen teknik pou travay ak mesaj ki ka voye bay itilizatè yo, osi byen ke yon metòd pou siveyans disk.
  11. Bash Scripting Pati 11, Atann Kòmandman — materyèl sa a dedye a zouti Espere, ak ki ou ka otomatize entèraksyon ak sèvis piblik entèaktif. An patikilye, nou ap pale de expect scripts ak entèraksyon yo ak bash scripts ak lòt pwogram.

Nou kwè ke youn nan karakteristik yo ki gen anpil valè nan seri atik sa a se ke li, kòmanse soti nan pi senp la, apwopriye pou itilizatè yo nan nenpòt nivo, piti piti mennen nan sijè ki byen grav, bay tout moun yon chans avanse nan kreyasyon an script liy lòd Linux. .

Chè lektè! Nou mande gourou bash pwogramasyon yo pou yo pale sou fason yo te rive nan wotè yo nan metriz yo, pataje sekrè yo, epi nou espere resevwa enpresyon nan men moun ki fèk ekri premye script yo.

Bash Scripts: kòmansman an

Se sèlman itilizatè ki anrejistre ki ka patisipe nan sondaj la. Enskri, tanpri.

Èske mwen ta dwe tradui rès la nan seri atik yo?

  • Wi!

  • Pa gen okenn bezwen

1030 itilizatè yo te vote. 106 itilizatè te absteni.

Sous: www.habr.com

Add nouvo kòmantè