การเขียนสคริปต์เชลล์เป็นส่วนสำคัญของกระบวนการอัตโนมัติใน Linux การเขียนสคริปต์ช่วยให้คุณเขียนลำดับของคำสั่งในไฟล์แล้วดำเนินการได้
ซึ่งช่วยประหยัดเวลาได้เพราะคุณไม่จำเป็นต้องเขียนคำสั่งบางคำสั่งซ้ำแล้วซ้ำอีก คุณสามารถทำงานประจำวันได้อย่างมีประสิทธิภาพและแม้กระทั่งกำหนดเวลาสำหรับการดำเนินการอัตโนมัติ
คุณยังสามารถตั้งค่าสคริปต์บางตัวให้ทำงานเมื่อเริ่มต้น เช่น แสดงข้อความเฉพาะเมื่อเปิดเซสชันใหม่หรือตั้งค่าตัวแปรสภาพแวดล้อมบางอย่างได้
แอปพลิเคชันและการใช้สคริปต์มีมากมาย มาเริ่มกันเลย
ในบทความนี้ คุณจะได้เรียนรู้:
- bash shell คืออะไร
- สคริปต์ทุบตีคืออะไรและคุณจะระบุได้อย่างไร
- วิธีสร้าง bash script แรกและเรียกใช้งาน
- ไวยากรณ์พื้นฐานของเชลล์สคริปต์
- วิธีดูสคริปต์ตามกำหนดเวลาของระบบ
- วิธีทำให้สคริปต์อัตโนมัติโดยการจัดกำหนดการผ่านงาน cron
วิธีที่ดีที่สุดในการเรียนรู้คือการฝึกฝน ฉันขอแนะนำให้คุณติดตามโดยใช้ Replit คุณสามารถเข้าถึงเชลล์ Linux ที่ทำงานอยู่ได้ภายในไม่กี่นาที
ข้อมูลเบื้องต้นเกี่ยวกับ Bash Shell
บรรทัดคำสั่ง Linux มีให้โดยโปรแกรมที่เรียกว่าเชลล์ ในช่วงหลายปีที่ผ่านมา โปรแกรมเชลล์ได้พัฒนาเพื่อรองรับตัวเลือกต่างๆ
ผู้ใช้ที่แตกต่างกันสามารถกำหนดค่าให้ใช้เชลล์ที่แตกต่างกันได้ แต่ผู้ใช้ส่วนใหญ่ต้องการใช้เชลล์เริ่มต้นปัจจุบัน เชลล์เริ่มต้นสำหรับ Linux distros จำนวนมากคือ GNU Bourne-Again Shell (bash) Bash สำเร็จโดย Bourne shell (sh
)
เมื่อคุณเปิดใช้เชลล์ในครั้งแรก เชลล์จะใช้สคริปต์เริ่มต้นที่อยู่ใน .bashrc
หรือ .bash_profile
ไฟล์ที่ให้คุณปรับแต่งการทำงานของเชลล์ได้
เมื่อใช้เชลล์แบบโต้ตอบ มันจะแสดง $
เมื่อรอรับคำสั่งจากผู้ใช้ นี่เรียกว่าพรอมต์ของเชลล์
[username@host ~]$
หากเชลล์ทำงานเป็นรูท พรอมต์จะเปลี่ยนเป็น #
. พรอมต์ superuser ของเชลล์มีลักษณะดังนี้:
[root@host ~]#
Bash มีประสิทธิภาพมากเพราะทำให้การดำเนินการบางอย่างง่ายขึ้นซึ่งทำได้ยากด้วย GUI โปรดจำไว้ว่าเซิร์ฟเวอร์ส่วนใหญ่ไม่มี GUI และควรเรียนรู้การใช้พลังของอินเทอร์เฟซบรรทัดคำสั่ง (CLI)
สคริปต์ทุบตีคืออะไร
สคริปต์ทุบตีคือชุดคำสั่งที่เขียนในไฟล์ สิ่งเหล่านี้ถูกอ่านและดำเนินการโดยโปรแกรมทุบตี โปรแกรมรันทีละบรรทัด
ตัวอย่างเช่น คุณสามารถนำทางไปยังเส้นทางที่ต้องการ สร้างโฟลเดอร์ และวางกระบวนการภายในโดยใช้บรรทัดคำสั่ง
คุณสามารถทำตามลำดับขั้นตอนเดียวกันได้โดยบันทึกคำสั่งในสคริปต์ทุบตีและเรียกใช้ คุณสามารถเรียกใช้สคริปต์กี่ครั้งก็ได้
คุณระบุสคริปต์ทุบตีได้อย่างไร
นามสกุลไฟล์ของ .sh
.
โดยการตั้งชื่อแบบแผน สคริปต์ทุบตีจะลงท้ายด้วย .sh
. อย่างไรก็ตาม สคริปต์ทุบตีสามารถทำงานได้ดีโดยไม่มี sh
การขยาย.
สคริปต์เริ่มต้นด้วย bash bang
สคริปต์ยังระบุด้วย shebang
. Shebang คือการรวมกันของ bash #
และ bang !
ตามเส้นทางเชลล์ทุบตี นี่คือบรรทัดแรกของสคริปต์ Shebang บอกให้เชลล์ดำเนินการผ่าน bash shell Shebang เป็นเพียงเส้นทางที่สมบูรณ์แบบสำหรับล่ามทุบตี
ด้านล่างนี้เป็นตัวอย่างของคำสั่ง shebang
#! /bin/bash
เส้นทางของโปรแกรมทุบตีอาจแตกต่างกันไป เราจะดูในภายหลังว่าจะระบุได้อย่างไร
สิทธิ์ในการดำเนินการ
สคริปต์มีสิทธิ์ดำเนินการสำหรับผู้ใช้ที่ดำเนินการ
สิทธิ์ในการดำเนินการแสดงโดย x
. ในตัวอย่างด้านล่าง ผู้ใช้ของฉันมี rwx
(อ่าน เขียน ดำเนินการ) สิทธิ์สำหรับไฟล์ test_script.sh
สีไฟล์
สคริปต์ปฏิบัติการจะปรากฏเป็นสีที่แตกต่างจากไฟล์และโฟลเดอร์ที่เหลือ
ในกรณีของฉัน สคริปต์ที่มีสิทธิ์ดำเนินการจะปรากฏเป็นสีเขียว
วิธีสร้างสคริปต์ทุบตีแรกของคุณ
มาสร้างสคริปต์อย่างง่ายใน bash ที่ส่งออก Hello World
.
สร้างไฟล์ชื่อ hello_world.sh
touch hello_world.sh
ค้นหาเส้นทางไปยัง bash shell ของคุณ
which bash
ในกรณีของฉัน เส้นทางคือ /usr/bin/bash
และฉันจะรวมสิ่งนี้ไว้ในชีบัง
เขียนคำสั่ง
เราจะ echo
"สวัสดีชาวโลก" ไปยังคอนโซล
สคริปต์ของเราจะมีลักษณะดังนี้:
#! usr/bin/bash
echo "Hello World"
แก้ไขไฟล์ hello_world.sh
โดยใช้โปรแกรมแก้ไขข้อความที่คุณเลือกและเพิ่มบรรทัดด้านบนเข้าไป
ให้สิทธิ์ในการดำเนินการแก่ผู้ใช้ของคุณ
แก้ไขการอนุญาตไฟล์และอนุญาตให้เรียกใช้สคริปต์โดยใช้คำสั่งด้านล่าง:
chmod u+x hello_world.sh
chmod
แก้ไขสิทธิ์ที่มีอยู่ของไฟล์สำหรับผู้ใช้เฉพาะ เรากำลังเพิ่ม +x
ถึงผู้ใช้ u
.
เรียกใช้สคริปต์
คุณสามารถเรียกใช้สคริปต์ด้วยวิธีต่อไปนี้:
./hello_world.sh
bash hello_world.sh
.
นี่คือผลลัพธ์:
ไวยากรณ์พื้นฐานของการเขียนสคริปต์ทุบตี
เช่นเดียวกับภาษาการเขียนโปรแกรมอื่น ๆ สคริปต์ทุบตีเป็นไปตามชุดของกฎเพื่อสร้างโปรแกรมที่คอมพิวเตอร์เข้าใจได้ ในส่วนนี้ เราจะศึกษาไวยากรณ์ของสคริปต์ทุบตี
วิธีกำหนดตัวแปร
เราสามารถกำหนดตัวแปรโดยใช้ไวยากรณ์ variable_name=value
. ในการรับค่าของตัวแปร ให้เพิ่ม $
ก่อนตัวแปร
#!/bin/bash
# A simple variable example
greeting=Hello
name=Tux
echo $greeting $name
ทักซ์ยังเป็นชื่อของมาสคอตลินุกซ์ เพนกวินอีกด้วย
นิพจน์เลขคณิต
ด้านล่างนี้คือตัวดำเนินการที่รองรับโดย bash สำหรับการคำนวณทางคณิตศาสตร์:
ตัวดำเนินการ | การใช้งาน |
---|---|
+ | เพิ่มเติม |
- | การลบ |
* | การคูณ |
/ | ดิวิชั่น |
** | การยกกำลัง |
% | โมดูลัส |
มาดูตัวอย่างกัน
นิพจน์ตัวเลขสามารถคำนวณและเก็บไว้ในตัวแปรโดยใช้ไวยากรณ์ด้านล่าง:
var=$((expression))
ลองมาดูตัวอย่างกัน
#!/bin/bash
var=$((3+9))
echo $var
เศษส่วนคำนวณไม่ถูกต้องโดยใช้วิธีการข้างต้นและตัดทอน
สำหรับการคำนวณทศนิยม , เราสามารถใช้ bc
คำสั่งเพื่อให้ได้ผลลัพธ์เป็นทศนิยมจำนวนหนึ่ง bc
(Bash Calculator) เป็นเครื่องคำนวณบรรทัดคำสั่งที่รองรับการคำนวณจุดทศนิยมจำนวนหนึ่ง
echo "scale=2;22/7" | bc
โดยที่ scale
กำหนดจำนวนตำแหน่งทศนิยมที่ต้องการในผลลัพธ์
วิธีอ่านอินพุตของผู้ใช้
บางครั้ง คุณจะต้องรวบรวมข้อมูลของผู้ใช้และดำเนินการที่เกี่ยวข้อง
ใน bash เราสามารถป้อนข้อมูลของผู้ใช้โดยใช้ read
คำสั่ง
read variable_name
หากต้องการแจ้งผู้ใช้ด้วยข้อความที่กำหนดเอง ให้ใช้ -p
ธง.
read -p "Enter your age" variable_name
ตัวอย่าง:
#!/bin/bash
echo "Enter a numner"
read a
echo "Enter a numner"
read b
var=$((a+b))
echo $var
ตัวดำเนินการเชิงตรรกะเปรียบเทียบตัวเลข
การเปรียบเทียบใช้เพื่อตรวจสอบว่าคำสั่งประเมินเป็น true
หรือ false
. เราสามารถใช้ตัวดำเนินการที่แสดงด้านล่างเพื่อเปรียบเทียบสองคำสั่ง:
การทำงาน | ไวยากรณ์ | คำอธิบาย |
---|---|---|
ความเท่าเทียม | num1 -eq num2 | คือ num1 เท่ากับ num2 |
มากกว่าเท่ากับ | num1 -ge num2 | คือ num1 มากกว่าเท่ากับ num2 |
มากกว่า | num1 -gt num2 | เป็น num1 มากกว่า num2 |
น้อยกว่าเท่ากับ | num1 -le num2 | เป็น num1 น้อยกว่าเท่ากับ num2 |
น้อยกว่า | num1 -lt num2 | เป็น num1 น้อยกว่า num2 |
ไม่เท่ากับ | num1 -ne num2 | คือ num1 ไม่เท่ากับ num2 |
ไวยากรณ์ :
if [ conditions ]
then
commands
fi
ตัวอย่าง :
มาเปรียบเทียบตัวเลขสองตัวและหาความสัมพันธ์กัน:
read x
read y
if [ $x -gt $y ]
then
echo X is greater than Y
elif [ $x -lt $y ]
then
echo X is less than Y
elif [ $x -eq $y ]
then
echo X is equal to Y
fi
เอาท์พุต:
คำสั่งแบบมีเงื่อนไข (การตัดสินใจ)
เงื่อนไขคือนิพจน์ที่ประเมินเป็นนิพจน์บูลีน (true
หรือ false
). ในการตรวจสอบเงื่อนไข เราสามารถใช้ if
, if-else
, if-elif-else
และซ้อนเงื่อนไข
โครงสร้างของประโยคเงื่อนไขมีดังนี้:
if...then...fi
คำชี้แจงif...then...else...fi
คำชี้แจงif..elif..else..fi
if..then..else..if..then..fi..fi..
(เงื่อนไขที่ซ้อนกัน)
ไวยากรณ์ :
if [[ condition ]]
then
statement
elif [[ condition ]]; then
statement
else
do this by default
fi
เพื่อสร้างการเปรียบเทียบที่มีความหมาย เราสามารถใช้ AND -a
และ OR -o
เช่นกัน
ข้อความด้านล่างแปลเป็น:ถ้า a
มากกว่า 40 และ b
น้อยกว่า 6
if [ $a -gt 40 -a $b -lt 6 ]
ตัวอย่าง :ลองหาประเภทสามเหลี่ยมโดยการอ่านความยาวของด้านของมัน
read a
read b
read c
if [ $a == $b -a $b == $c -a $a == $c ]
then
echo EQUILATERAL
elif [ $a == $b -o $b == $c -o $a == $c ]
then
echo ISOSCELES
else
echo SCALENE
fi
ผลผลิต :
กรณีทดสอบ #1
กรณีทดสอบ #2
กรณีทดสอบ #3
วนซ้ำและข้าม
สำหรับลูปอนุญาตให้คุณดำเนินการคำสั่งตามจำนวนครั้งที่กำหนด
วนซ้ำกับตัวเลข:
ในตัวอย่างด้านล่าง ลูปจะวนซ้ำ 5 ครั้ง
#!/bin/bash
for i in {1..5}
do
echo $i
done
วนรอบด้วยสตริง:
เราสามารถวนลูปผ่านสตริงได้เช่นกัน
#!/bin/bash
for X in cyan magenta yellow
do
echo $X
done
ขณะวนรอบ
ในขณะที่ลูปตรวจสอบเงื่อนไขและวนซ้ำจนกว่าเงื่อนไขจะยังคงเป็น true
. เราจำเป็นต้องจัดเตรียมคำสั่งตัวนับที่เพิ่มตัวนับเพื่อควบคุมการทำงานของลูป
ในตัวอย่างด้านล่าง (( i += 1 ))
เป็นคำสั่งตอบโต้ที่เพิ่มค่าของ i
.
ตัวอย่าง:
#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
echo "$i"
(( i += 1 ))
done
กำลังอ่านไฟล์
สมมติว่าเรามีไฟล์ sample_file.txt
ดังที่แสดงด้านล่าง:
เราสามารถอ่านไฟล์ทีละบรรทัดและพิมพ์ผลลัพธ์บนหน้าจอได้
#!/bin/bash
LINE=1
while read -r CURRENT_LINE
do
echo "$LINE: $CURRENT_LINE"
((LINE++))
done < "sample_file.txt"
ผลลัพธ์:
วิธีดำเนินการคำสั่งด้วยเครื่องหมายย้อนกลับ
หากคุณต้องการรวมเอาท์พุตของคำสั่งที่ซับซ้อนในสคริปต์ของคุณ คุณสามารถเขียนคำสั่งภายในเครื่องหมายขีดกลับ
ไวยากรณ์:
var=` commands
`
ตัวอย่าง :สมมติว่าเราต้องการรับผลลัพธ์ของรายการจุดเชื่อมต่อด้วย tmpfs
ในชื่อของพวกเขา เราสามารถสร้างคำสั่งได้ดังนี้:df -h | grep tmpfs
.
หากต้องการรวมไว้ในสคริปต์ทุบตี เราสามารถใส่เครื่องหมายถูกด้านหลัง
#!/bin/bash
var=`df -h | grep tmpfs`
echo $var
เอาท์พุต:
วิธีรับอาร์กิวเมนต์สำหรับสคริปต์จากบรรทัดคำสั่ง
เป็นไปได้ที่จะให้ข้อโต้แย้งกับสคริปต์ในการดำเนินการ
$@
แทนตำแหน่งของพารามิเตอร์ โดยเริ่มจากตัวเดียว
#!/bin/bash
for x in $@
do
echo "Entered arg is $x"
done
เรียกใช้ดังนี้:
./script arg1 arg2
วิธีการทำให้สคริปต์อัตโนมัติโดยการจัดกำหนดการผ่านงาน cron
Cron เป็นยูทิลิตี้การจัดตารางงานที่มีอยู่ในระบบที่คล้ายกับ Unix คุณสามารถกำหนดเวลาให้งานดำเนินการรายวัน รายสัปดาห์ รายเดือน หรือในเวลาที่กำหนดของวัน ระบบอัตโนมัติใน Linux อาศัยงาน cron เป็นหลัก
ด้านล่างนี้คือรูปแบบการจัดกำหนดการ crons:
# Cron job example
* * * * * sh /path/to/script.sh
ที่นี่ *
แทนนาที ชั่วโมง วัน เดือน วันทำงาน ตามลำดับ
ด้านล่างนี้คือตัวอย่างการจัดกำหนดการงาน cron
กำหนดการ | มูลค่าที่กำหนด |
---|---|
5 0 * 8 * | เวลา 00:05 น. ในเดือนสิงหาคม |
5 4 * * 6 | เวลา 04:05 น. ของวันอาทิตย์ |
0 22 * * 1-5 | เวลา 22:00 น. ของทุกวันในสัปดาห์ ตั้งแต่วันจันทร์ถึงวันศุกร์ |
คุณสามารถเรียนรู้เกี่ยวกับ cron โดยละเอียดในบล็อกโพสต์นี้
วิธีตรวจสอบสคริปต์ที่มีอยู่ในระบบ
การใช้ crontab
crontab -l
แสดงรายการสคริปต์ที่กำหนดไว้แล้วสำหรับผู้ใช้รายใดรายหนึ่ง
การใช้คำสั่ง find
find
คำสั่งช่วยในการค้นหาไฟล์ตามรูปแบบบางอย่าง เนื่องจากสคริปต์ส่วนใหญ่ลงท้ายด้วย .sh
เราสามารถใช้สคริปต์ find ได้ดังนี้:
find . -type f -name "*.sh"
ที่ไหน
.
แสดงถึงไดเร็กทอรีปัจจุบัน คุณสามารถเปลี่ยนเส้นทางได้ตามความเหมาะสม-type f
ระบุว่าประเภทไฟล์ที่เราต้องการเป็นไฟล์แบบข้อความ*.sh
บอกให้จับคู่ไฟล์ทั้งหมดที่ลงท้ายด้วย.sh
.
หากคุณสนใจที่จะอ่านรายละเอียดเกี่ยวกับคำสั่ง find ตรวจสอบโพสต์อื่นของฉัน
สรุป
ในบทช่วยสอนนี้ เราได้เรียนรู้พื้นฐานของเชลล์สคริปต์ เราพิจารณาตัวอย่างและไวยากรณ์ที่สามารถช่วยให้เราเขียนโปรแกรมที่มีความหมายได้
สิ่งที่คุณชอบที่สุดที่คุณได้เรียนรู้จากบทช่วยสอนนี้คืออะไร แจ้งให้เราทราบทาง Twitter!
คุณสามารถอ่านโพสต์อื่นๆ ของฉันได้ที่นี่
เวกเตอร์งานที่สร้างโดย macrovector - www.freepik.com