เวิร์กสเตชันออนไลน์ของ OnWorks Linux และ Windows

โลโก้

ฟรีโฮสติ้งออนไลน์สำหรับเวิร์กสเตชัน

<ก่อนหน้านี้ | Contents | ถัดไป>

หากคุณต้องการ พรอมต์สามารถรันเชลล์สคริปต์และทำงานแตกต่างกันภายใต้เงื่อนไขที่ต่างกัน คุณยังสามารถให้เสียงเตือนเล่นเพลงทุกครั้งที่คุณออกคำสั่ง แม้ว่าสิ่งนี้จะน่าเบื่อในไม่ช้า ข้อมูลเพิ่มเติมสามารถพบได้ใน Bash-Prompt HOWTO


ภาพ

7.2.5. เชลล์สคริปต์


7.2.5.1. สคริปต์คืออะไร


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

เชลล์ที่ไม่โต้ตอบ เมื่อ Bash รันเชลล์สคริปต์ มันจะตั้งค่าพารามิเตอร์พิเศษ 0 เป็นชื่อของไฟล์ แทนที่จะเป็นชื่อของเชลล์ และพารามิเตอร์ตำแหน่ง (ทุกอย่างที่ตามหลังชื่อของสคริปต์) จะถูกตั้งค่าเป็นอาร์กิวเมนต์ที่เหลือ หากมี หากไม่มีอาร์กิวเมนต์เพิ่มเติม พารามิเตอร์ตำแหน่งจะไม่ถูกตั้งค่า


เชลล์สคริปต์สามารถเรียกใช้งานได้โดยใช้คำสั่ง chmod คำสั่งเปิดบิตดำเนินการ เมื่อ Bash พบไฟล์ดังกล่าวขณะค้นหา เส้นทาง สำหรับคำสั่ง จะเรียก sub-shell เพื่อดำเนินการ กล่าวอีกนัยหนึ่งการดำเนินการ


ชื่อไฟล์ อาร์กิวเมนต์


เทียบเท่ากับการดำเนินการ


ทุบตี ชื่อไฟล์ ARGUMENTS


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


UNIX เวอร์ชันส่วนใหญ่ทำให้สิ่งนี้เป็นส่วนหนึ่งของกลไกการดำเนินการคำสั่งของระบบปฏิบัติการ หากบรรทัดแรกของสคริปต์ขึ้นต้นด้วยอักขระสองตัว "#!" ส่วนที่เหลือของบรรทัดจะระบุล่ามสำหรับโปรแกรม ดังนั้น คุณสามารถระบุ ทุบตี, awk, Perl หรือล่ามหรือเชลล์อื่น ๆ และเขียนส่วนที่เหลือของไฟล์สคริปต์ในภาษานั้น


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


สคริปต์ทุบตีมักขึ้นต้นด้วย


#! / bin / bash (สมมติว่า Bash ได้รับการติดตั้งใน / bin) เนื่องจากสิ่งนี้ทำให้มั่นใจได้ว่า Bash จะถูกใช้ในการตีความสคริปต์ แม้ว่าจะรันภายใต้เชลล์อื่นก็ตาม


ภาพ


7.2.5.2. ตัวอย่างง่ายๆ


สคริปต์ง่ายๆ ที่ประกอบด้วยคำสั่งเดียว กล่าวทักทายผู้ใช้ที่ดำเนินการ:


[เจอร์รี่@ไม่มีที่ไหนเลย ~] แมว สวัสดี.sh

#! / bin / ทุบตี

เสียงสะท้อน "สวัสดี $USER"

[เจอร์รี่@ไม่มีที่ไหนเลย ~] แมว สวัสดี.sh

#! / bin / ทุบตี

เสียงสะท้อน "สวัสดี $USER"

จริง ๆ แล้วสคริปต์ประกอบด้วยคำสั่งเดียวเท่านั้น เสียงสะท้อนซึ่งใช้ไฟล์ ค่าของ ($) ที่ USER ตัวแปรสภาพแวดล้อมเพื่อพิมพ์สตริงที่ปรับแต่งให้กับผู้ใช้ที่ออกคำสั่ง


สายการบินอื่นที่ใช้สำหรับแสดงผู้ใช้ที่เชื่อมต่อ:


#! / bin / ทุบตี

ใคร | ตัด -d " " -f 1 | เรียงลำดับ -u

#! / bin / ทุบตี

ใคร | ตัด -d " " -f 1 | เรียงลำดับ -u

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


ไทล์:~> cat bin/makebackupfiles.sh

#! / bin / ทุบตี

# ทำสำเนาของไฟล์ทั้งหมดในไดเรกทอรี LIST=`ls`

สำหรับฉันใน $LIST; ทำ

ORIG=$i

DEST=$i.เก่า

cp $ORIG $DEST echo "คัดลอก $i แล้ว"

ทำ

ไทล์:~> cat bin/makebackupfiles.sh

#! / bin / ทุบตี

# ทำสำเนาของไฟล์ทั้งหมดในไดเรกทอรี LIST=`ls`

สำหรับฉันใน $LIST; ทำ

ORIG=$i

DEST=$i.เก่า

cp $ORIG $DEST echo "คัดลอก $i แล้ว"

ทำ

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


การขอ /etc/rc.d/init.d ไดเร็กทอรีมีตัวอย่างมากมาย ลองดูสคริปต์นี้ที่ควบคุมเซิร์ฟเวอร์ ICanSeeYou ที่สมมติขึ้น:


# / bin / sh

# คำอธิบาย: ICanSeeYou ช่วยให้คุณเห็นผู้คนในเครือข่าย


# ชื่อกระบวนการ: ICanSeeYou

# ไฟล์ pid: /var/run/ICanSeeYou/ICanSeeYou.pid

# การตั้งค่า: /etc/ICanSeeYou.cfg


# ไลบรารีฟังก์ชันแหล่งที่มา

. /etc/rc.d/init.d/ฟังก์ชั่น


# ดูว่าเราถูกเรียก (ด้วยข้อโต้แย้งใด) กรณี "$1" ใน

เริ่ม)

echo -n "การเริ่มต้น ICanSeeYou: " daemon ICanSeeYou

เสียงสะท้อน

แตะ /var/lock/subsys/ICanSeeYou

;;

หยุด)

echo -n "กำลังปิด ICanSeeYou: "

# / bin / sh

# คำอธิบาย: ICanSeeYou ช่วยให้คุณเห็นผู้คนในเครือข่าย


# ชื่อกระบวนการ: ICanSeeYou

# ไฟล์ pid: /var/run/ICanSeeYou/ICanSeeYou.pid

# การตั้งค่า: /etc/ICanSeeYou.cfg


# ไลบรารีฟังก์ชันแหล่งที่มา

. /etc/rc.d/init.d/ฟังก์ชั่น


# ดูว่าเราถูกเรียก (ด้วยข้อโต้แย้งใด) กรณี "$1" ใน

เริ่ม)

echo -n "การเริ่มต้น ICanSeeYou: " daemon ICanSeeYou

เสียงสะท้อน

แตะ /var/lock/subsys/ICanSeeYou

;;

หยุด)

echo -n "กำลังปิด ICanSeeYou: "


killproc ICanSeeYou เสียงสะท้อน

rm -f /var/lock/subsys/ICanSeeYou

rm -f /var/run/ICanSeeYou/ICanSeeYou.pid

;;

สถานะ)

สถานะ ICanSeeYou

;;

รีสตาร์ท)

$0 หยุด

เริ่มต้น $0

;;

*)

echo "การใช้งาน: $0 {start|stop|restart|status}" exit 1

ว่า C


ทางออก 0

killproc ICanSeeYou เสียงสะท้อน

rm -f /var/lock/subsys/ICanSeeYou

rm -f /var/run/ICanSeeYou/ICanSeeYou.pid

;;

สถานะ)

สถานะ ICanSeeYou

;;

รีสตาร์ท)

$0 หยุด

เริ่มต้น $0

;;

*)

echo "การใช้งาน: $0 {start|stop|restart|status}" exit 1

ว่า C


ทางออก 0

ประการแรก กับ . command (dot) ชุดของฟังก์ชันเชลล์ที่ใช้โดยเชลล์สคริปต์เกือบทั้งหมดใน

/etc/rc.d/init.d, กำลังโหลด แล้ว a กรณี มีการออกคำสั่ง ซึ่งกำหนด 4 วิธีที่แตกต่างกันที่สคริปต์สามารถดำเนินการได้ ตัวอย่างอาจเป็น ไอแคนซียู เริ่มต้น. การตัดสินใจว่าจะใช้กรณีใดโดยการอ่านอาร์กิวเมนต์ (แรก) ของสคริปต์ด้วยนิพจน์ $1.


เมื่อไม่มีการป้อนข้อมูลที่สอดคล้อง จะใช้กรณีเริ่มต้นที่มีเครื่องหมายดอกจัน ซึ่งสคริปต์จะแสดงข้อความแสดงข้อผิดพลาด NS กรณี รายการลงท้ายด้วย ว่า C คำแถลง. ใน เริ่มต้น กรณีที่โปรแกรมเซิร์ฟเวอร์เริ่มทำงานเป็น daemon และกำหนด ID โปรเซสและล็อกไว้ ใน หยุด กรณีที่กระบวนการของเซิร์ฟเวอร์ถูกติดตามและหยุดลง และการล็อกและ PID จะถูกลบออก ตัวเลือก เช่น ภูต ตัวเลือกและฟังก์ชั่นเช่น ฆ่าถูกกำหนดไว้ใน /etc/rc.d/init.d/ฟังก์ชั่น ไฟล์. การตั้งค่านี้เฉพาะสำหรับการแจกจ่ายที่ใช้ในตัวอย่างนี้ initscripts ในระบบของคุณอาจใช้ฟังก์ชันอื่น กำหนดไว้ในไฟล์อื่น หรือไม่มีเลย


เมื่อสำเร็จ สคริปต์จะส่งคืนรหัสทางออกที่เป็นศูนย์ไปยังพาเรนต์


สคริปต์นี้เป็นตัวอย่างที่ดีของการใช้ฟังก์ชัน ซึ่งทำให้อ่านสคริปต์ได้ง่ายขึ้นและทำงานเสร็จเร็วขึ้น โปรดทราบว่าพวกเขาใช้ sh แทน ทุบตีเพื่อให้มีประโยชน์ในระบบที่หลากหลายขึ้น บนระบบ Linux เรียก ทุบตี as sh ส่งผลให้เชลล์ทำงานในโหมดที่สอดคล้องกับ POSIX


ระบบปฏิบัติการคลาวด์คอมพิวติ้งยอดนิยมที่ OnWorks: