Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

เชี่ยวชาญฟังก์ชันและไลบรารีเชลล์กำหนดเอง: คู่มือปฏิบัติสำหรับผู้ใช้ Linux

ใน Linux สคริปต์เชลล์ช่วยเราในหลายวิธีที่แตกต่างกัน รวมถึงการดำเนินการหรือแม้แต่อัตโนมัติงานบริหารระบบบางอย่าง สร้างเครื่องมือบรรทัดคำสั่งง่ายๆ และอื่นๆ อีกมากมาย

ในคู่มือนี้ เราจะแสดงให้ผู้ใช้ Linux ใหม่ๆ รู้ว่าจะจัดเก็บสคริปต์เชลล์กำหนดเองได้ที่ไหนอย่างน่าเชื่อถือ อธิบายวิธีเขียนฟังก์ชันเชลล์กำหนดเองและไลบรารี ใช้ฟังก์ชันจากไลบรารีในสคริปต์อื่นๆ

ที่จะจัดเก็บสคริปต์เชลล์

เพื่อให้รันสคริปต์ของคุณได้โดยไม่ต้องพิมพ์พาธเต็ม/สัมบูรณ์ พวกเขาต้องจัดเก็บอยู่ในหนึ่งในไดเรกทอรีในตัวแปรสภาพแวดล้อม $PATH

เพื่อตรวจสอบ $PATH ของคุณ ให้รันคำสั่งด้านล่าง:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

ปกติแล้ว หากไดเรกทอรี bin มีอยู่ในไดเรกทอรีบ้านของผู้ใช้ มันจะถูกรวมอยู่ใน $PATH ของเขา/เธอโดยอัตโนมัติ คุณสามารถจัดเก็บสคริปต์เชลล์ของคุณที่นี่

ดังนั้น ให้สร้างไดเรกทอรี bin (ซึ่งอาจจัดเก็บสคริปต์ Perl, Awk หรือ Python หรือโปรแกรมอื่นๆ):

$ mkdir ~/bin

ต่อไป สร้างไดเรกทอรีชื่อ lib (ย่อมาจาก libraries) ที่คุณจะเก็บไลบรารีของคุณเอง คุณยังสามารถเก็บไลบรารีสำหรับภาษาอื่นๆ เช่น C, Python และอื่นๆ ได้ที่นี่ ภายใต้มัน สร้างไดเรกทอรีอีกอันชื่อ sh; ไดเรกทอรีนี้จะจัดเก็บไลบรารีเชลล์ของคุณโดยเฉพาะ:

$ mkdir -p ~/lib/sh

สร้างฟังก์ชันและไลบรารีเชลล์ของคุณเอง

ฟังก์ชันเชลล์ เป็นกลุ่มคำสั่งที่ทำงานเฉพาะในสคริปต์ พวกมันทำงานคล้ายกับขั้นตอน (procedures), สubroutines และฟังก์ชันในภาษาโปรแกรมมิ่งอื่นๆ

ไวยากรณ์สำหรับการเขียนฟังก์ชันคือ:

function_name() { list of commands }

ตัวอย่างเช่น คุณสามารถเขียนฟังก์ชันในสคริปต์เพื่อแสดง date ได้ดังนี้:

showDATE() {date;}

ทุกครั้งที่คุณต้องการแสดง date เพียงเรียกใช้ฟังก์ชันข้างต้นโดยใช้ชื่อของมัน:

$ showDATE

ไลบรารีเชลล์ คือสคริปต์เชลล์เพียงอย่างเดียว อย่างไรก็ตาม คุณสามารถเขียนไลบรารีเพื่อจัดเก็บฟังก์ชันของคุณเท่านั้น ที่คุณสามารถเรียกใช้จากสคริปต์เชลล์อื่นๆ ภายหลัง

ด้านล่างคือตัวอย่างของไลบรารีชื่อ libMYFUNCS.sh ในไดเรกทอรี ~/lib/sh ของฉัน พร้อมตัวอย่างฟังก์ชันเพิ่มเติม:

#!/bin/bash
#Function to clearly list directories in PATH
showPATH() {
oldifs="$IFS" #store old internal field separator
IFS=: #specify a new internal field separator
for DIR in $PATH ; do
echo $DIR
done
IFS="$oldifs" #restore old internal field separator
}
#Function to show logged user
showUSERS() {
echo -e "Below are the user logged on the system:\n"
w
}
#Print a user's details
printUSERDETS() {
oldifs="$IFS" #store old internal field separator
IFS=: #specify a new internal field separator
read -p "Enter user name to be searched:" uname #read username
echo "" #read and store from a here string values into variables using : as a field delimiter
read -r username pass uid gid comments homedir shell <<< "$(cat /etc/passwd | grep "^$uname")"
#print out captured values
echo -e "Username is : $username\n"
echo -e "User's ID : $uid\n"
echo -e "User's GID : $gid\n"
echo -e "User's Comments : $comments\n"
echo -e "User's Home Dir : $homedir\n"
echo -e "User's Shell : $shell\n"
IFS="$oldifs" #store old internal field separator
}

บันทึกไฟล์และทำให้สคริปต์รันได้

วิธีเรียกใช้ฟังก์ชันจากไลบรารี

เพื่อใช้ฟังก์ชันใน lib คุณต้องรวม lib ในสคริปต์เชลล์ที่จะใช้ฟังก์ชันก่อน ในรูปแบบด้านล่าง:

$ ./path/to/lib OR $ source /path/to/lib

ดังนั้น คุณจะใช้ฟังก์ชัน printUSERDETS จากไลบรารี ~/lib/sh/libMYFUNCS.sh ในสคริปต์อื่นดังแสดงด้านล่าง

คุณไม่ต้องเขียนโค้ดอื่นในสคริปต์นี้เพื่อพิมพ์รายละเอียดของผู้ใช้คนใดคนหนึ่ง เพียงเรียกใช้ฟังก์ชันที่มีอยู่

เปิดไฟล์ใหม่ชื่อ test.sh:

#!/bin/bash
#include lib
. ~/lib/sh/libMYFUNCS.sh
#use function from lib
printUSERDETS
#exit script
exit 0

บันทึก แล้วทำให้สคริปต์รันได้และรันมัน:

$ chmod 755 test.sh
$ ./test.sh
เชี่ยวชาญฟังก์ชันและไลบรารีเชลล์กำหนดเอง: คู่มือปฏิบัติสำหรับผู้ใช้ Linux

ในบทความนี้ เราแสดงให้คุณเห็นว่าจะจัดเก็บสคริปต์เชลล์ได้ที่ไหนอย่างน่าเชื่อถือ วิธีเขียนฟังก์ชันและไลบรารีเชลล์ของคุณเอง เรียกใช้ฟังก์ชันจากไลบรารีในสคริปต์เชลล์ทั่วไป

ต่อไป เราจะอธิบายวิธีตรงไปตรงมาในการกำหนดค่า Vim เป็น IDE สำหรับการเขียนสคริปต์ Bash จนกว่าจะพบกันใหม่ ขอให้คุณติดต่อกับ TecMint อยู่เสมอ และแบ่งปันความคิดเห็นเกี่ยวกับคู่มือนี้ผ่านแบบฟอร์มความคิดเห็นด้านล่างครับ