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

โลโก้

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

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

แอปพลิเคชั่นที่สมบูรณ์ยิ่งขึ้น

หลังจากที่ห่างหายไปนาน เรามาเริ่มงานกันต่อที่ sys_info_page โปรแกรม. การเพิ่มครั้งต่อไปของเราจะเพิ่มตัวเลือกบรรทัดคำสั่งต่างๆ ให้กับโปรแกรมดังนี้:

ไฟล์เอาท์พุต เราจะเพิ่มตัวเลือกเพื่อระบุชื่อไฟล์เพื่อเก็บเอาท์พุตของโปรแกรม จะระบุเป็นอย่างใดอย่างหนึ่ง -f ไฟล์ or --ไฟล์ ไฟล์.

โหมดโต้ตอบ ตัวเลือกนี้จะแจ้งให้ผู้ใช้ป้อนชื่อไฟล์เอาต์พุต และจะพิจารณาว่าไฟล์ที่ระบุมีอยู่แล้วหรือไม่ ถ้าเป็นเช่นนั้น ผู้ใช้จะได้รับพร้อมท์ก่อนที่จะเขียนทับไฟล์ที่มีอยู่ ตัวเลือกนี้จะถูกระบุโดยทั้ง -i or --เชิงโต้ตอบ.

ช่วยด้วย. แต่ละ -h or --ช่วยด้วย อาจมีการระบุเพื่อให้โปรแกรมแสดงข้อความการใช้งานที่ให้ข้อมูล

นี่คือรหัสที่จำเป็นสำหรับการนำการประมวลผลบรรทัดคำสั่งไปใช้:



การใช้งาน () {

echo "$PROGNAME: การใช้งาน: $PROGNAME [-f file | -i]" return

}

# ประมวลผลตัวเลือกบรรทัดคำสั่งแบบโต้ตอบ =

การใช้งาน () {

echo "$PROGNAME: การใช้งาน: $PROGNAME [-f file | -i]" return

}

# ประมวลผลตัวเลือกบรรทัดคำสั่งแบบโต้ตอบ =


ชื่อไฟล์=


ในขณะที่ [[ -n $1 ]]; ทำกรณี $ 1 ใน

-f | --ไฟล์)

เปลี่ยน

ชื่อไฟล์=$1

;;

ชื่อไฟล์=


ในขณะที่ [[ -n $1 ]]; ทำกรณี $ 1 ใน

-f | --ไฟล์)


-i | --แบบโต้ตอบ) โต้ตอบ=1

;;

-h | --help) ออกจากการใช้งาน

;;

*) การใช้งาน >&2

ทางออก 1

;;

-i | --แบบโต้ตอบ) โต้ตอบ=1

;;

-h | --help) ออกจากการใช้งาน

;;

*) การใช้งาน >&2

ทางออก 1

;;


ว่า C

กะเสร็จ

ว่า C

กะเสร็จ


ภาพ

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

ต่อไป เราจะเริ่มการประมวลผลแบบวนซ้ำ วนซ้ำนี้ดำเนินต่อไปในขณะที่พารามิเตอร์ตำแหน่ง

$1 ไม่ว่างเปล่า ในตอนท้ายของลูป เรามีคำสั่ง shift เพื่อเลื่อนพารามิเตอร์ตำแหน่งเพื่อให้แน่ใจว่าลูปจะสิ้นสุดในที่สุด

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

พื้นที่ -f พารามิเตอร์ได้รับการจัดการในลักษณะที่น่าสนใจ เมื่อตรวจพบจะทำให้เกิดการเพิ่มเติม เปลี่ยน ที่จะเกิดขึ้นซึ่งความก้าวหน้าของพารามิเตอร์ตำแหน่ง $1 ไปยังอาร์กิวเมนต์ชื่อไฟล์ที่ส่งให้กับ -f ตัวเลือก

ต่อไปเราจะเพิ่มโค้ดเพื่อใช้งานโหมดโต้ตอบ:



# โหมดโต้ตอบ


ถ้า [[ -n $โต้ตอบ ]]; แล้วในขณะที่จริง; ทำ

อ่าน -p "ป้อนชื่อไฟล์ที่ส่งออก: " ชื่อไฟล์ถ้า [[ -e $filename ]]; แล้ว

read -p "'$filename' มีอยู่แล้ว เขียนทับหรือไม่ [y/n/q] > " case $REPLY in

Y|y) แตก

# โหมดโต้ตอบ


ถ้า [[ -n $โต้ตอบ ]]; แล้วในขณะที่จริง; ทำ

อ่าน -p "ป้อนชื่อไฟล์ที่ส่งออก: " ชื่อไฟล์ถ้า [[ -e $filename ]]; แล้ว

read -p "'$filename' มีอยู่แล้ว เขียนทับหรือไม่ [y/n/q] > " case $REPLY in

Y|y) แตก


;;

Q|q) echo "โปรแกรมถูกยกเลิก" ทางออก

;;

*) ดำเนินต่อ

;;

ว่า C

elif [[ -z $filename ]]; แล้วไปต่อ

อื่น

ทำลาย

fi

ทำ

fi

;;

Q|q) echo "โปรแกรมถูกยกเลิก" ทางออก

;;

*) ดำเนินต่อ

;;

ว่า C

elif [[ -z $filename ]]; แล้วไปต่อ

อื่น

ทำลาย

fi

ทำ

fi


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

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



write_html_page () { แมว <<- _EOF_

$TITLE

$TITLE

$TIMESTAMP

$(report_uptime)

$(รายงาน_disk_space)

$(report_home_space)

_EOF_ กลับมา

}


# หน้า html เอาต์พุต


ถ้า [[ -n $filename ]]; แล้ว

write_html_page () { แมว <<- _EOF_

$TITLE

$TITLE

$TIMESTAMP

$(report_uptime)

$(รายงาน_disk_space)

$(report_home_space)

_EOF_ กลับมา

}


# หน้า html เอาต์พุต


ถ้า [[ -n $filename ]]; แล้ว


ถ้าแตะ $filename && [[ -f $filename ]]; จากนั้น write_html_page > $filename

อื่น

echo "$PROGNAME: ไม่สามารถเขียนไฟล์ '$filename'" >&2 exit 1

fi อื่น

เขียน_html_page

fi

ถ้าแตะ $filename && [[ -f $filename ]]; จากนั้น write_html_page > $filename

อื่น

echo "$PROGNAME: ไม่สามารถเขียนไฟล์ '$filename'" >&2 exit 1

fi อื่น

เขียน_html_page

fi


รหัสที่จัดการตรรกะของ -f ตัวเลือกจะปรากฏที่ส่วนท้ายของรายการที่แสดงด้านบน ในนั้น เราทดสอบการมีอยู่ของชื่อไฟล์ และหากพบหนึ่งไฟล์ จะมีการทดสอบต่อรูปแบบเพื่อดูว่าไฟล์นั้นเขียนได้จริงหรือไม่ การทำเช่นนี้ a แตะ ถูกดำเนินการ ตามด้วยการทดสอบเพื่อตรวจสอบว่าไฟล์ผลลัพธ์เป็นไฟล์ปกติหรือไม่ การทดสอบทั้งสองนี้จะดูแลการนั่ง - uations ที่มีการป้อนชื่อพาธที่ไม่ถูกต้อง (แตะ จะล้มเหลว) และหากไฟล์นั้นมีอยู่แล้ว แสดงว่าเป็นไฟล์ปกติ

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


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