Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

บทแนะนำการเขียนสคริปต์ทุบตีพร้อมตัวอย่างการใช้งานจริง 5 ตัวอย่าง

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

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

เชลล์เรียกว่าเป็นเชลล์แบบโต้ตอบ เมื่ออ่านอินพุตจากผู้ใช้โดยตรง

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

พิมพ์ค่าของตัวแปรเชลล์ในตัว $- เพื่อดูว่าเชลล์เป็นแบบโต้ตอบหรือไม่โต้ตอบ

# echo $-
himBH

หมายเหตุ:ตัวแปร $- มี “i” เมื่อเชลล์เป็นแบบโต้ตอบ .

Unix มี Shells ที่หลากหลาย บอร์นเชลล์ (sh), บอร์นเชลล์อีกครั้ง (bash), C เชลล์ (csh), Korn เชลล์ (ksh), Tenex C เชลล์ (tcsh) ใช้คำสั่ง which หรือ whereis unix เพื่อค้นหาตำแหน่งของเชลล์เฉพาะดังที่แสดงด้านล่าง

# which bash
/bin/bash

# whereis bash
bash: /bin/bash /usr/share/man/man1/bash.1.gz

คุณสามารถสลับระหว่างเชลล์โดยพิมพ์ชื่อเชลล์ เช่น พิมพ์ csh เพื่อเปลี่ยนเป็น C เชลล์

การเขียนและการทำงานของเชลล์สคริปต์

ตัวอย่างที่ 1. สคริปต์ Hello World Bash

  1. สร้างสคริปต์โดยพิมพ์สองบรรทัดต่อไปนี้ลงในไฟล์โดยใช้โปรแกรมแก้ไขที่คุณชื่นชอบ
  2. $ cat helloworld.sh
    #!/bin/bash
    echo Hello World
  3. คุณสามารถเลือกชื่อใดก็ได้สำหรับไฟล์ ชื่อไฟล์ไม่ควรเหมือนกับคำสั่งในตัวของ Unix
  4. สคริปต์จะเริ่มต้นด้วยอักขระสองตัว '#!' ซึ่งเรียกว่า she-bang เสมอ นี่เป็นการระบุว่าไฟล์นั้นเป็นสคริปต์ และควรดำเนินการโดยใช้ล่าม (/bin/bash) ที่ระบุโดยบรรทัดแรกที่เหลือในไฟล์
  5. ดำเนินการสคริปต์ดังที่แสดงด้านล่าง หากคุณมีปัญหาใดๆ ในการดำเนินการเชลล์สคริปต์ โปรดดูบทแนะนำการใช้งานเชลล์สคริปต์
  6. $ bash helloworld.sh
    Hello World
  7. เมื่อคุณรันคำสั่ง "bash helloworld.sh" คำสั่งนี้จะเริ่มเชลล์ที่ไม่โต้ตอบและส่งผ่านชื่อไฟล์เป็นอาร์กิวเมนต์
  8. บรรทัดแรกจะบอกระบบปฏิบัติการว่าเชลล์ใดที่จะวางไข่เพื่อเรียกใช้สคริปต์
  9. ในตัวอย่างข้างต้น bash interpreter ซึ่งแปลสคริปต์และดำเนินการคำสั่งทีละตัวจากบนลงล่าง
  10. คุณสามารถรันสคริปต์ได้โดยไม่ต้องใช้ "bash" นำโดย:
    • เปลี่ยนการอนุญาตบนสคริปต์เพื่อให้คุณ (ผู้ใช้) ดำเนินการได้โดยใช้คำสั่ง “chmod u+x helloworld.sh”
    • ไดเรกทอรีที่มีสคริปต์ควรรวมอยู่ในตัวแปรสภาพแวดล้อม PATH หากไม่ได้รวมไว้ คุณสามารถเรียกใช้สคริปต์โดยระบุเส้นทางที่แน่นอนของสคริปต์
  11. echo เป็นคำสั่งที่ส่งออกอาร์กิวเมนต์ที่เรามอบให้ นอกจากนี้ยังใช้เพื่อพิมพ์ค่าของตัวแปร

ไฟล์ Bash-Startup

ดังที่เราได้กล่าวไว้ก่อนหน้านี้ในลำดับการดำเนินการสำหรับ .bash_profile และบทความเกี่ยวกับไฟล์ที่เกี่ยวข้อง เมื่อเรียกใช้ bash เป็นเชลล์แบบโต้ตอบ อันดับแรกจะอ่านและดำเนินการคำสั่งจาก /etc/profile หากไม่มี /etc/profile มันจะอ่านและรันคำสั่งจาก ~/.bash_profile, ~/.bash_login และ ~/.profile ตามลำดับที่กำหนด อาจใช้อ็อพชัน –noprofile เมื่อเชลล์เริ่มทำงานเพื่อยับยั้งการทำงานนี้

โดยปกติ bash_profile ของคุณจะรัน ~/.bashrc หากต้องการคุณสามารถแสดงข้อความต้อนรับได้ สิ่งนี้จะทำงานเมื่อคุณเข้าสู่ระบบครั้งแรกเท่านั้น คุณสามารถส่งออกตัวแปรอะไรก็ได้ที่คุณต้องการ และคุณสามารถตั้งค่านามแฝงที่จะทำงานและพร้อมใช้งานเมื่อคุณเปิดเชลล์ เมื่อออกจากเชลล์การเข้าสู่ระบบ Bash จะอ่านและดำเนินการคำสั่งจากไฟล์ ~/.bash_logout

ตัวอย่าง 2. พิมพ์ข้อความต้อนรับเมื่อคุณเข้าสู่ระบบ

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

$ cat ~/.bash_profile
hname=`hostname`
echo "Welcome on $hname."

เมื่อคุณลงชื่อเข้าใช้เชลล์แบบโต้ตอบ คุณจะเห็นข้อความต้อนรับดังที่แสดงด้านล่าง

login as: root
root@dev-db's password:
Welcome on dev-db

ตัวอย่าง 3. พิมพ์ข้อมูลที่เกี่ยวข้องกับระบบ

เมื่อคุณเข้าสู่ระบบเชลล์แบบโต้ตอบ คุณสามารถแสดงชื่อของเคอร์เนลที่ติดตั้งในเซิร์ฟเวอร์ เวอร์ชันทุบตี เวลาทำงาน และเวลาในเซิร์ฟเวอร์ได้

$cat ~/.bash_profile
hname=`hostname`
echo "Welcome on $hname."

echo -e "Kernel Details: " `uname -smr`
echo -e "`bash --version`"
echo -ne "Uptime: "; uptime
echo -ne "Server time : "; date

เมื่อคุณเรียกใช้เชลล์แบบโต้ตอบ เชลล์จะพิมพ์ข้อความดังที่แสดงด้านล่าง

login as: root
root@dev-db's password:
Welcome on dev-db

Kernel Information: Linux 2.6.18-128 x86_64
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
Uptime: 11:24:01 up 21 days, 13:15, 3 users, load average: 0.08, 0.18, 0.11
Server time : Tue Feb 22 11:24:01 CET 2010

ตัวอย่าง 4. พิมพ์รายละเอียดการเข้าสู่ระบบล่าสุด

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

$ cat ~/.bash_profile
hname=`hostname`
echo "Welcome on $hname."

echo -e "Kernel Details: " `uname -smr`
echo -e "`bash --version`"
echo -ne "Uptime: "; uptime
echo -ne "Server time : "; date

Lastlog | grep "รูท" | awk {'print "การเข้าสู่ระบบครั้งล่าสุดจาก :"$3

print "Last Login Date &Time:",$4,$5,$6,$7,$8,$9;}'
ระหว่างการเริ่มต้น คุณจะได้รับข้อความดังที่แสดงด้านล่าง

login as: root
root@dev-db's password:
Welcome on dev-db

Kernel Information: Linux 2.6.18-128 x86_64
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
Uptime: 11:24:01 up 21 days, 13:15, 3 users, load average: 0.08, 0.18, 0.11
Server time : Tue Feb 22 11:24:01 CET 2010

เข้าระบบล่าสุดจาก :sasikala-laptop

Last Login Date &Time:อังคาร 22 ก.พ. 11:24:01 +0100 2010

ตัวอย่างที่ 5. ส่งออกตัวแปรและตั้งค่านามแฝงในระหว่างการเริ่มต้น

คำสั่งทั่วไปที่คุณจะใช้ในไฟล์ .bashrc และ .bash_profile คือคำสั่ง export และ alias

นามแฝงเป็นเพียงการแทนที่ข้อความหนึ่งกับอีกข้อความหนึ่ง เมื่อคุณเรียกใช้นามแฝง มันจะแทนที่สิ่งที่คุณพิมพ์ด้วยนามแฝงที่เท่ากับ ตัวอย่างเช่น หากคุณต้องการตั้งค่านามแฝงสำหรับคำสั่ง ls เพื่อแสดงรายการไฟล์/โฟลเดอร์ที่มีสี ให้ทำดังนี้:

alias ls 'ls --color=tty'

หากคุณเพิ่มคำสั่งนี้ในไฟล์เริ่มต้น คุณสามารถดำเนินการคำสั่ง ls ซึ่งจะถูกแทนที่โดยอัตโนมัติด้วยคำสั่ง ls –color=tty

คำสั่งส่งออกใช้เพื่อตั้งค่าตัวแปรสภาพแวดล้อม ระบบหรือแอปพลิเคชันอื่นใช้ตัวแปรสภาพแวดล้อมต่างๆ เป็นเพียงวิธีการตั้งค่าพารามิเตอร์ที่แอปพลิเคชัน/สคริปต์ใดๆ สามารถอ่านได้ หากคุณตั้งค่าตัวแปรโดยไม่มีคำสั่ง export ตัวแปรนั้นจะมีอยู่เฉพาะสำหรับกระบวนการนั้นเท่านั้น

ในตัวอย่างด้านล่าง กำลังส่งออกตัวแปรสภาพแวดล้อม HISTSIZE บรรทัดที่ขึ้นต้นด้วย # คือบรรทัดแสดงความคิดเห็น

$ cat /etc/profile
alias ls 'ls --color=tty'

# Setup some environment variables.
export HISTSIZE=1000

PATH=$PATH:$HOME/bin:/usr/bin:/bin/usr:/sbin/etc

export PATH

export SVN_SH=${SVN_RSH-ssh}