<ก่อนหน้านี้ | เนื้อหา | ถัดไป>
ฟังก์ชั่นเชลล์
ขณะนี้สคริปต์ของเราดำเนินการตามขั้นตอนต่อไปนี้เพื่อสร้างเอกสาร HTML:
1. เปิดหน้า
2. เปิดส่วนหัวของหน้า
3. ตั้งชื่อเพจ
4. ปิดส่วนหัวของหน้า
5. เปิดเนื้อหาของหน้า
6. ส่วนหัวของหน้าผลลัพธ์
7. การประทับเวลาของเอาต์พุต
8. ปิดเนื้อหาของหน้า
9. ปิดหน้า
สำหรับขั้นตอนต่อไปของการพัฒนา เราจะเพิ่มงานบางอย่างระหว่างขั้นตอนที่ 7 ถึง 8 ซึ่งจะรวมถึง:
● เวลาทำงานและโหลดของระบบ นี่คือระยะเวลานับตั้งแต่การปิดระบบหรือรีบูตครั้งล่าสุด และจำนวนเฉลี่ยของงานที่กำลังรันอยู่บนโปรเซสเซอร์ในช่วงเวลาต่างๆ
● พื้นที่ดิสก์ การใช้พื้นที่โดยรวมบนอุปกรณ์จัดเก็บข้อมูลของระบบ
● พื้นที่บ้าน จำนวนพื้นที่เก็บข้อมูลที่ผู้ใช้แต่ละคนใช้
หากเรามีคำสั่งสำหรับงานเหล่านี้ เราสามารถเพิ่มคำสั่งเหล่านี้ในสคริปต์ของเราได้ง่ายๆ ด้วยการแทนที่คำสั่ง:
#! / bin / ทุบตี
# โปรแกรมออกหน้าข้อมูลระบบ
TITLE="รายงานข้อมูลระบบสำหรับ $HOSTNAME" CURRENT_TIME=$(date +"%x %r %Z")
TIMESTAMP="สร้าง $CURRENT_TIME โดย $USER"
แมว << _EOF_
#! / bin / ทุบตี
# โปรแกรมออกหน้าข้อมูลระบบ
TITLE="รายงานข้อมูลระบบสำหรับ $HOSTNAME" CURRENT_TIME=$(date +"%x %r %Z")
TIMESTAMP="สร้าง $CURRENT_TIME โดย $USER"
แมว << _EOF_
$TITLE
$TITLE
$TIMESTAMP
$(report_uptime)
$(รายงาน_disk_space)
$(report_home_space)
_อีโอเอฟ_
$TITLE
$TITLE
$TIMESTAMP
$(report_uptime)
$(รายงาน_disk_space)
$(report_home_space)
_อีโอเอฟ_
เราสามารถสร้างคำสั่งเพิ่มเติมเหล่านี้ได้สองวิธี เราสามารถเขียนสคริปต์แยกกันสามสคริปต์และวางไว้ในไดเร็กทอรีที่ระบุไว้ใน PATH ของเรา หรือเราอาจฝังสคริปต์ภายในโปรแกรมของเราเป็น ฟังก์ชั่นเปลือก. ดังที่เราได้กล่าวไว้ก่อนหน้านี้ ฟังก์ชันของเชลล์คือ “มินิสคริปต์” ที่อยู่ภายในสคริปต์อื่นและสามารถทำหน้าที่เป็นโปรแกรมอิสระได้ ฟังก์ชันของเชลล์มีรูปแบบวากยสัมพันธ์สองรูปแบบ ประการแรก แบบฟอร์มที่เป็นทางการมากขึ้น:
ฟังก์ชัน ชื่อ {
คำสั่ง
กลับ
}
และรูปแบบที่ง่ายกว่า (และเป็นที่ต้องการโดยทั่วไป):
ชื่อ () {
คำสั่ง
กลับ
}
#! / bin / ทุบตี
#! / bin / ทุบตี
# สาธิตการทำงานของเชลล์
ฟังก์ชั่น step2 { echo "ขั้นตอนที่ 2" return
}
# โปรแกรมหลักเริ่มที่นี่ echo "ขั้นตอนที่ 1"
# สาธิตการทำงานของเชลล์
ฟังก์ชั่น step2 { echo "ขั้นตอนที่ 2" return
}
# โปรแกรมหลักเริ่มที่นี่ echo "ขั้นตอนที่ 1"
ที่ไหน ชื่อ เป็นชื่อของฟังก์ชันและ คำสั่ง เป็นชุดคำสั่งที่อยู่ภายในฟังก์ชัน ทั้งสองรูปแบบเท่ากันและอาจใช้แทนกันได้ ด้านล่าง เราจะเห็นสคริปต์ที่สาธิตการใช้ฟังก์ชันเชลล์:
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
ฟังก์ชั่นเชลล์
13 ขั้นตอนที่ 2
14 เสียงสะท้อน "ขั้นตอนที่ 3"
13 ขั้นตอนที่ 2
14 เสียงสะท้อน "ขั้นตอนที่ 3"
เมื่อเชลล์อ่านสคริปต์ เชลล์จะข้ามบรรทัดที่ 1 ถึง 11 เนื่องจากบรรทัดเหล่านั้นประกอบด้วยความคิดเห็นและนิยามฟังก์ชัน การดำเนินการเริ่มต้นที่บรรทัดที่ 12 โดยมี an เสียงสะท้อน สั่งการ. สาย 13 โทร ฟังก์ชันเชลล์ step2 และเชลล์รันฟังก์ชันเหมือนกับที่มันทำกับคำสั่งอื่นๆ ตัวควบคุมโปรแกรมจะย้ายไปที่บรรทัดที่ 6 และวินาที เสียงสะท้อน คำสั่งถูกดำเนินการ บรรทัดที่ 7 จะดำเนินการต่อไป มันคือ กลับ คำสั่งยุติฟังก์ชันและส่งคืนการควบคุมไปยังโปรแกรมที่บรรทัดตามหลังการเรียกใช้ฟังก์ชัน (บรรทัดที่ 14) และรายการสุดท้าย เสียงสะท้อน คำสั่งถูกดำเนินการ โปรดทราบว่าเพื่อให้การเรียกใช้ฟังก์ชันเป็นที่รู้จักในฐานะฟังก์ชันของเชลล์และไม่ถูกตีความว่าเป็นชื่อของโปรแกรมภายนอก คำจำกัดความของฟังก์ชันเชลล์จะต้องปรากฏในสคริปต์ก่อนที่จะเรียก
เราจะเพิ่มคำจำกัดความของฟังก์ชันเชลล์ขั้นต่ำลงในสคริปต์ของเรา:
#! / bin / ทุบตี
# โปรแกรมออกหน้าข้อมูลระบบ
TITLE="รายงานข้อมูลระบบสำหรับ $HOSTNAME" CURRENT_TIME=$(date +"%x %r %Z")
TIMESTAMP="สร้าง $CURRENT_TIME โดย $USER"
report_uptime () { กลับ
}
report_disk_space () { ส่งคืน
}
report_home_space () { กลับ
}
แมว << _EOF_
$TITLE
$TITLE
$TIMESTAMP
$(report_uptime)
$(รายงาน_disk_space)
$(report_home_space)
#! / bin / ทุบตี
# โปรแกรมออกหน้าข้อมูลระบบ
TITLE="รายงานข้อมูลระบบสำหรับ $HOSTNAME" CURRENT_TIME=$(date +"%x %r %Z")
TIMESTAMP="สร้าง $CURRENT_TIME โดย $USER"
report_uptime () { กลับ
}
report_disk_space () { ส่งคืน
}
report_home_space () { กลับ
}
แมว << _EOF_
$TITLE
$TITLE
$TIMESTAMP
$(report_uptime)
$(รายงาน_disk_space)
$(report_home_space)
_อีโอเอฟ_
_อีโอเอฟ_
ชื่อฟังก์ชันของเชลล์ใช้กฎเดียวกันกับตัวแปร ฟังก์ชันต้องมีอย่างน้อยหนึ่งคำสั่ง NS กลับ คำสั่ง (ซึ่งเป็นทางเลือก) เป็นไปตามข้อกำหนด