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

เชี่ยวชาญ Linux Bash Scripting: เทคนิคขั้นสูง – ตอนที่ 3

บทความก่อนหน้าต่อไปนี้ของซีรีส์ 'Shell Scripting' ได้รับการชมเชยสูง และนั่นคือเหตุผลที่ผมเขียนบทความนี้เพื่อขยายกระบวนการเรียนรู้ที่ไม่มีที่สิ้นสุด

Bash Keywords

Keyword คือ คำหรือสัญลักษณ์ที่มีความหมายพิเศษต่อภาษาคอมพิวเตอร์ สัญลักษณ์และคำต่อไปนี้มีความหมายพิเศษต่อ Bash เมื่อไม่ได้ถูก quoted และเป็นคำแรกของคำสั่ง

! esac select } case fi then [[ do for until ]] done function while elif if time else in {

แตกต่างจากภาษาคอมพิวเตอร์ส่วนใหญ่ Bash อนุญาตให้ใช้ keywords เป็น variable names แม้จะทำให้สคริปต์อ่านยากขึ้น เพื่อให้สคริปต์เข้าใจง่าย keywords ไม่ควรใช้เป็นชื่อตัวแปร

คำสั่งถูกนำไปปฏิบัติในเชลล์เป็น $(command) คุณอาจต้องรวม full path ของคำสั่ง เช่น $(/bin/date) เพื่อการรันที่ถูกต้อง

คุณอาจรู้พาธของโปรแกรมเฉพาะด้วยคำสั่ง 'whereis' เช่น whereis date

[admin@wsxdn.com /]# whereis date
date: /bin/date /usr/share/man/man1/date.1.gz

พอสำหรับทฤษฎีตอนนี้ เราจะไม่พูดมากเกินไป มาเริ่มที่สคริปต์กันดีกว่า

ย้าย Current Working Directory

ย้ายจาก current working directory ไประดับใดก็ได้ด้านบน โดยเพียงให้ค่าตัวเลขที่ท้ายสคริปต์ขณะรัน

#! /bin/bash
LEVEL=$1
for ((i = 1; i <= LEVEL; i++))
do
    CDIR=../$CDIR
done
cd $CDIR
echo "You are in: "$PWD
exec /bin/bash

บันทึกโค้ดข้างต้นเป็น "up.sh" บนเดสก์ท็อป ทำให้รันได้ (chmod 755 up.sh) รัน:

./up.sh 2 (จะย้าย current working directory ขึ้น 2 ระดับ)
./up.sh 4 (จะย้าย current working directory ขึ้น 4 ระดับ)

การใช้งานและพื้นที่ประยุกต์

ในสคริปต์ขนาดใหญ่ที่มีโฟลเดอร์ซ้อนโฟลเดอร์... ที่มี libraries, binaries, icons, executables ฯลฯ อยู่ที่ต่างกัน คุณในฐานะนักพัฒนาสามารถนำสคริปต์นี้ไปใช้เพื่อย้ายไปตำแหน่งที่ต้องการได้อย่างอัตโนมัติ

หมายเหตุ: for เป็นลูปในสคริปต์ข้างต้น และจะทำงานต่อไปจนกว่าค่าจะเป็นจริงสำหรับลูป

ตัวอย่างผลลัพธ์
[admin@wsxdn.com /]# chmod 755 up
[admin@wsxdn.com /]# ./up.sh 2
You are in: /
[admin@wsxdn.com /]# ./up.sh 4
You are in: /
[admin@wsxdn.com /]#

ดาวน์โหลด up.sh

สร้าง Random File หรือ Folder

สร้างไฟล์สุ่ม (โฟลเดอร์) โดยไม่มีโอกาสซ้ำ

#! /bin/bash
echo "Hello $USER"; echo "$(uptime)" >> "$(date)".txt
echo "Your File is being saved to $(pwd)"

นี่คือสคริปต์ง่าย แตการทำงานของมันไม่ได้ง่ายขนาดนั้น

  1. 'echo' : พิมพ์ทุกอย่างที่เขียนในเครื่องหมายคำพูด
  2. '$' : เป็นตัวแปรเชลล์
  3. '>>' : เอาต์พุตถูกเปลี่ยนทิศทางไปยังเอาต์พุตของคำสั่ง date ตามด้วย txt extension

เรารู้ว่าเอาต์พุตของคำสั่ง date คือ date และ time ใน hour, minute, second พร้อม year ดังนั้นเราจึงได้ชื่อไฟล์ที่จัดระเบียบโดยไม่มีโอกาสซ้ำ สามารถใช้ได้มากเมื่อผู้ใช้ต้องการไฟล์ที่สร้างพร้อม time stamp เพื่ออ้างอิงในอนาคต

ตัวอย่างผลลัพธ์
[admin@wsxdn.com /]# ./randomfile.sh
Hello server
Your File is being saved to /home/server/Desktop

คุณสามารถดูไฟล์ที่สร้างบนเดสก์ท็อปพร้อมวันที่วันนี้และเวลาปัจจุบัน

[admin@wsxdn.com /]# nano Sat\ Jul\ 20\ 13\:51\:52\ IST\ 2013.txt
13:51:52 up 3:54, 1 user, load average: 0.09, 0.12, 0.08

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

ดาวน์โหลด randomfile.sh

สคริปต์รวบรวมข้อมูลเครือข่าย

รวบรวมข้อมูลเครือข่ายบนเซิร์ฟเวอร์ Linux สคริปต์ใหญ่เกินไปและไม่สามารถโพสต์โค้ดทั้งหมดและเอาต์พุทได้ที่นี่ ดังนั้นดีกว่าคุณดาวน์โหลดสคริปต์ผ่านลิงก์ด้านล่างและทดสอบด้วยตัวเอง

หมายเหตุ: คุณอาจต้องติดตั้งแพ็กเกจ lsb-core และแพ็กเกจที่จำเป็นอื่นๆ และ dependency Apt หรือ Yum แพ็กเกจที่จำเป็น แน่นอนคุณต้องเป็น root เพื่อรันสคริปต์ เพราะคำสั่งส่วนใหญ่ที่ใช้ที่นี่ถูกตั้งค่าให้รันเป็น root

ตัวอย่างผลลัพธ์
[admin@wsxdn.com /]# ./collectnetworkinfo.sh
The Network Configuration Info Written To network.20-07-13.info.txt. Please email this file to admin@wsxdn.com_provider.com.
ktop

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

ดาวน์โหลด collectnetworkinfo.sh

สคริปต์แปลง UPPERCASE เป็น lowercase

สคริปต์ที่แปลง UPPERCASE เป็น lowercase และเปลี่ยนทิศทางเอาต์พุทไปยังไฟล์ข้อความ "small.txt" ซึ่งสามารถปรับเปลี่ยนได้ตามต้องการ

#!/bin/bash
echo -n "Enter File Name : "
read fileName
if [ ! -f $fileName ]; then
    echo "Filename $fileName does not exists"
    exit 1
fi
tr '[A-Z]' '[a-z]' < $fileName >> small.txt

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

ตัวอย่างผลลัพธ์
[admin@wsxdn.com /]# ./convertlowercase.sh
Enter File Name : a.txt
Initial File: A B C D E F G H I J K ...

New File (small.txt) output:

a b c d e f g h i j k ...

ดาวน์โหลด convertlowercase.sh

โปรแกรมเครื่องคิดเลขง่ายๆ

#! /bin/bash
clear
sum=0
i="y"
echo " Enter one no."
read n1
echo "Enter second no."
read n2
while [ $i = "y" ]
do
    echo "1.Addition"
    echo "2.Subtraction"
    echo "3.Multiplication"
    echo "4.Division"
    echo "Enter your choice"
    read ch
    case $ch in
        1)sum=`expr $n1 + $n2`; echo "Sum ="$sum;;
        2)sum=`expr $n1 - $n2`; echo "Sub = "$sum;;
        3)sum=`expr $n1 \* $n2`; echo "Mul = "$sum;;
        4)sum=`expr $n1 / $n2`; echo "Div = "$sum;;
        *)echo "Invalid choice";;
    esac
    echo "Do u want to continue (y/n)) ?"
    read i
    if [ $i != "y" ]
    then
        exit
    fi
done
ตัวอย่างผลลัพธ์
[admin@wsxdn.com /]# ./simplecalc.sh
Enter one no.
12
Enter second no.
14
1.Addition
2.Subtraction
3.Multiplication
4.Division
Enter your choice
1
Sum =26
Do u want to continue (y/n)) ?
y
1.Addition
2.Subtraction
3.Multiplication
4.Division
Enter your choice
3
mul = 14812
Do u want to continue (y/n)) ?
n

ดาวน์โหลด simplecalc.sh

ดูแล้วมั้ยว่าการสร้างโปรแกรมทรงพลังอย่างการคำนวณ ง่ายเพียงไหน นี่ไม่ใช่จุดจบ เราจะมาอีกอย่างน้อยหนึ่งบทความของซีรีส์นี้ ครอบคลุมมุมมองกว้างขึ้นจากมุมมองการบริหาร

ขอจบเท่านี้สำหรับตอนนี้ ในฐานะผู้อ่านและนักวิจารณ์ที่ดีที่สุด อย่าลืมบอกเราว่าคุณเพลินเพลินกับอะไรและเพลินเพลินมากน้อยเพียงไหนในบทความนี้ และอยากเห็นอะไรในบทความหน้า คำถามใดๆ ยินดีต้อนรับในความคิดเห็น จนกว่าจะพบกันใหม่ ขอให้ สุขภาพแข็งแรง, ปลอดภัย และ tuned Like และ Share เรา และช่วยเราเผยแพร่