Giunsa Paghimo ang Yano nga Shell Script sa Linux


Ang paghimo sa mga script sa kabhang mao ang usa sa labing hinungdanon nga kahanas nga kinahanglan nga naa sa mga tiggamit sa Linux sa tumoy sa ilang mga tudlo. Ang mga script sa Shell adunay dako nga papel sa pag-automate sa mga balik-balik nga buluhaton nga kung dili mahimo’g makakapoy nga ipatuman ang linya sa linya.

Niini nga panudlo, among gipasiugda ang pipila sa mga batakang shell scripting nga mga operasyon nga kinahanglan adunay matag tiggamit sa Linux.

1. Paghimo ug Simple Shell Script

Ang shell script kay usa ka file nga naglangkob sa ASCII text. Magsugod kami pinaagi sa paghimo og usa ka yano nga script sa shell, ug aron mahimo kini, mogamit kami usa ka editor sa teksto. Adunay ubay-ubay nga vim editor.

Magsugod kami pinaagi sa paghimo ug usa ka yano nga script nga nagpakita sa \Hello world kung gipatuman.

$ vim hello.sh

Idikit ang mosunod nga sulod sa file ug i-save.

#!/bin/bash
# Print Hello world message
echo "Hello World!"

Atong adtoan ang shell script linya por linya.

  • Ang unang linya – #!/bin/bash – nailhan nga shebang header. Kini usa ka espesyal nga pagtukod nga nagpakita kung unsang programa ang gamiton sa paghubad sa script. Sa kini nga kaso, kini ang bash shell nga gipakita sa /bin/bash. Adunay uban nga mga pinulongan sa scripting sama sa Python nga gipaila sa #!/usr/bin/python3 ug Perl kansang shebang header kay gipaila sa #!/usr/bin/perl.
  • Ang ikaduhang linya kay komentaryo. Ang usa ka komentaryo usa ka pahayag nga naghulagway kung unsa ang gibuhat sa usa ka script sa shell ug wala ipatuman kung ang script gipadagan. Ang mga komento kanunay giunhan sa hash sign #.
  • Ang kataposang linya mao ang sugo nga nag-print sa mensahe nga ‘Hello World’ sa terminal.

Ang sunod nga lakang mao ang paghimo sa script nga ma-executable pinaagi sa pag-assign sa execute permission gamit ang chmod command sama sa gipakita.

$ chmod +x  hello.sh

Sa katapusan, padagana ang shell script gamit ang bisan hain sa mga sugo:

$ bash hello.sh
OR
$ ./hello.sh

2. Paggamit sa Kondisyon nga mga Pahayag aron Ipatuman ang Code

Sama sa ubang mga programming language, ang conditional statements gigamit sa bash scripting aron makahimog mga desisyon, nga adunay gamay lang nga kausaban sa syntax. Atong tabunan ang if, if-else, ug elif conditional nga mga pahayag.

Ang if nga pahayag mahimong gamiton sa pagsulay sa usa o daghang mga kondisyon. Magsugod kami sa sukaranan nga paggamit sa kung pahayag aron masulayan ang usa ka kondisyon. Ang if nga pamahayag gipasabot sa if ... fi blocks.

if command
then
  statement
fi

Atong tan-awon ang shell script sa ubos.

#!/bin/bash
echo 'Enter the score'
read x

if [[ $x == 70 ]]; then
  echo 'Good job!'
fi

Ang script sa kabhang sa ibabaw nag-aghat sa tiggamit sa paghatag usa ka marka nga gitipigan sa usa ka variable x. Kung ang score katumbas sa 70, ibalik sa script ang output nga \Good job!. Ang operator sa pagtandi == gigamit sa pagsulay kung ang gisulod nga marka, nga gitipigan sa variable x, katumbas ba ngadto sa 100.

Ang ubang mga operator sa pagtandi nga imong magamit naglakip sa:

  • -eq – Katumbas sa
  • -ne – Dili katumbas sa
  • -lt – Ubos sa
  • -le – Kubos o katumbas sa
  • -lt – Ubos sa
  • -ge – Labaw sa o katumbas sa

Pananglitan, ang if-statement block sa ubos nag-print sa 'Work Harder' kung ang input score kay bisan unsang kantidad nga ubos sa 50.

if [[ $x -lt 50 ]]; then
  echo 'Work Harder!'
fi

Para sa mga sitwasyon diin aduna kay 2 ka posibleng resulta: – kini man o kana – ang if-else nga pahayag magamit.

if command
then
  statement1
else
  statement2
fi

Ang script sa ubos nagbasa sa input score ug nagsusi kung mas dako ba kini o katumbas sa 70.

Kung ang iskor labaw pa sa o katumbas sa 70, makadawat ka og mensahe nga 'Great job, You passed!'. Bisan pa, kung ang marka nahulog sa ubos sa 70, ang output nga 'Napakyas ka' maimprinta.

#!/bin/bash

echo 'Enter the score'

read x

if [[ $x -ge 70 ]]; then
  echo 'Great job, You passed!'
else
  echo  'You failed'
fi

Sa mga sitwasyon diin adunay daghang mga kondisyon ug lain-laing mga resulta, ang if-elif-else nga pahayag gigamit. Kini nga pahayag nagkinahanglan sa mosunod nga pormat.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

Pananglitan, kami adunay script alang sa usa ka lottery nga nagsusi kung ang numero nga gisulod 90, 60 o 30.

#!/bin/bash

echo 'Enter the score'

read x

if [[ $x -eq 90 ]];
then
  echo “You have won the First Prize”

elif [[ $x -eq 60 ]];
then
  echo “You have won the Second Prize”

elif [[ $x -eq 30 ]];
then 
  echo “You have won the Second Prize”
else
  echo “Please try again”
fi

3. Gamit ang If Statement nga adunay AND Logic

Mahimo nimong gamiton ang if nga pahayag kauban ang AND logic operator aron ipatuman ang usa ka buluhaton kung matagbaw ang duha ka kondisyon. Ang && operator gigamit sa pagpasabot sa AND nga lohika.

#!/bin/bash

echo 'Please Enter your user_id'
read user_id

echo 'Please Enter your tag_no'
read tag_id

if [[ ($user_id == “tecmint” && $tag_id -eq 3990) ]];
then
  echo “Login successful”
else
  echo “Login failure”
fi

5. Gamit ang If Statement nga may OR Logic

Kung gigamit ang OR nga lohika, nga girepresentahan sa || simbolo, bisan usa sa mga kondisyon kinahanglan matagbaw sa script aron mahatagan ang gipaabut nga mga sangputanan.

#!/bin/bash

echo 'Please enter a random number'
read number

if [[ (number -eq 55 || number -eq 80) ]];
then
 echo 'Congratulations! You’ve won'
else
 echo 'Sorry, try again'
fi

Gamita ang Looping Constructs

Bash loops nagtugot sa mga tiggamit sa paghimo sa usa ka serye sa mga buluhaton hangtud nga ang usa ka piho nga resulta makab-ot. Kini magamit sa paghimo sa balik-balik nga mga buluhaton. Niini nga seksyon, kita adunay usa ka pagtan-aw sa pipila ka mga galong nga imong makita usab sa ubang mga programming language.

Kini mao ang usa sa labing sayon nga mga galong sa pagtrabaho uban sa. Ang syntax yano ra:

while  <some test>
do
 commands
done

Ang while loop sa ubos naglista sa tanan nga mga numero gikan sa 1 hangtod 10 kung gipatuman.

#!/bin/bash
# A simple while loop
counter=1
while [ $counter -le 10 ]
 do
echo $counter
 ((counter++))
done

Atong hisgotan ang while loop:

Ang variable counter gisugdan sa 1. Ug samtang ang variable mas ubos o katumbas sa 10, ang bili sa counter madugangan hangtod matagbaw ang kondisyon. Ang linya nga echo $counter nag-imprenta sa tanang numero gikan sa 1 ngadto sa 10.

Sama sa while loop, ang usa ka for loop gigamit sa pag-execute sa code nga iteratively. I.e. sublion ang pagpatuman sa code sa daghang mga higayon kutob sa mahimo nga gihubit sa tiggamit.

Ang syntax mao ang:

for var in 1 2 3 4 5 N
do
 command1
 command2
done

Ang para sa loop sa ubos nag-usab sa 1 hangtod sa 10 ug giproseso ang ilang mga kantidad sa screen.

Ang mas maayong paagi aron makab-ot kini mao ang paghubit sa usa ka range gamit ang double curly braces { } ingon sa gipakita imbes nga i-type ang tanang numero.

#!/bin/bash
# Specify range in a for loop

for num in {1..10}
do
  echo $num
done

Mga Parameter sa Posisyon sa Bash

Ang positional parameter kay usa ka espesyal nga variable nga gi-refer sa script kung ang mga value ipasa sa shell pero dili ma-assign. Ang mga parametro sa posisyon nagdagan gikan sa $0 $1 $2 $3 …… hangtod sa $9. Labaw sa $9 nga kantidad, ang mga parametro kinahanglang isulod sa mga kulot nga bracket eg $ {10}, $ {11} … ug uban pa.

Kung gipatuman ang script, ang una nga positional parameter nga $0 nagkuha sa ngalan sa script sa shell. Ang $1 nga parametro magkuha sa unang variable nga gipasa sa terminal, $2 mokuha sa ikaduha, $3 sa ikatulo ug uban pa.

Magbuhat ta og script test.sh sama sa gipakita.

#!/bin/bash
echo "The name of the script is: " $0
echo "My first name is: " $1
echo "My second name is: " $2

Sunod, ipatuman ang script ug ihatag ang una ug ikaduha nga ngalan ingon nga mga argumento:

# bash test.sh James Kiarie

Gikan sa output, atong makita nga ang unang variable nga giimprinta mao ang ngalan sa shell script, sa niini nga kaso, test.sh. Pagkahuman, ang mga ngalan giimprinta nga katumbas sa mga parameter sa posisyon nga gihubit sa script sa shell.

Ang mga parameter sa posisyon mapuslanon tungod kay kini makatabang kanimo sa pag-customize sa datos nga gisulod imbes sa dayag nga paghatag og bili sa usa ka variable.

Shell Command Exit Codes

Magsugod kita pinaagi sa pagtubag sa usa ka yano nga pangutana, Unsa ang exit code?

Ang matag command nga gipatuman sa shell sa usa ka user o shell script adunay exit status. Ang exit status kay integer.

Ang exit status nga 0 nagpasabot nga ang command malampusong gipatuman nga walay bisan unsang mga sayop. Ang bisan unsang butang tali sa 1 hangtod 255 nagpakita nga ang mando napakyas o wala malampuson nga gipatuman.

Aron makit-an ang exit status sa usa ka command, gamita ang $? Shell variable.

Ang usa ka exit status nga 1 nagpunting sa usa ka kinatibuk-ang sayup o bisan unsang dili gitugotan nga mga sayup sama sa pag-edit sa mga file nga wala’y pagtugot sa sudo.

Usa ka exit status sa 2 puntos sa sayop nga paggamit sa usa ka command o builtin shell variable.

Ang 127 exit status nagpunting sa usa ka iligal nga sugo nga kasagaran naghatag sa 'command not found' error.

Pagproseso sa Output sa Shell Commands sulod sa usa ka Script

Sa bash scripting, mahimo nimong tipigan ang output sa usa ka command sa usa ka variable para magamit sa umaabot. Gitawag usab kini nga shell command substitution ug mahimong makab-ot sa mosunod nga mga paagi.

variable=$(command)
OR
variable=$(/path/to/command)
OR
variable=$(command argument 1 argument 2 ...)

Pananglitan, mahimo nimong tipigan ang sugo sa petsa sa usa ka variable nga gitawag karon ug tawagan ang script sa shell aron ipadayag ang karon nga petsa.

#!/bin/bash

today=$(date)

echo “Today is $today”

Atong kuhaon ang laing pananglitan. Ibutang ta nga gusto nimo pangitaon ang balido nga mga tiggamit sa pag-login sa imong sistema sa Linux. Unsaon nimo kini? Una, ang lista sa tanan nga mga tiggamit (parehong sistema, proseso, ug mga tiggamit sa pag-login) gitipigan sa /etc/passwd file.

Aron matan-aw ang file, kinahanglan nimo nga gamiton ang grep command aron pangitaon ang mga tiggamit nga adunay /bin/bash attribute ug gamita ang cut -c 1-10 nga command sama sa gipakita aron ipakita ang unang 10 ka karakter sa mga ngalan.

Among gitipigan ang cat command sa login_users variable.

#!/bin/bash
login_users=$(cat /etc/passwd | grep /bin/bash | cut -c 1-10)
echo 'This is the list of login users:
echo $login_users

Kini nagdala sa among panudlo sa paghimo sa yano nga mga script sa shell hangtod sa katapusan. Kami nanghinaut nga imong nakita kini nga bililhon.