คู่มือเริ่มต้นของ Shell Scripting 4 เงื่อนไข & คำสั่ง If-Then
เราครอบคลุมพื้นฐานเพียงพอในคู่มือของเราเกี่ยวกับเชลล์สคริปต์ที่คุณควรรู้สึกสะดวกสบายในการทดสอบ ในภาคของสัปดาห์นี้เราจะจัดการกับสิ่งที่สนุกสนานมากขึ้นเช่นเงื่อนไขและคำสั่ง“ if-then”.
เงื่อนไขคืออะไร?
ในภาษาที่ใช้ในชีวิตประจำวันเราบอกว่าเงื่อนไขเป็นข้อกำหนดที่ต้องพบเจอเพื่อให้บางสิ่งเกิดขึ้น เพื่อให้แล็ปท็อปของฉันสามารถเชื่อมต่ออินเทอร์เน็ตได้มีเงื่อนไขหลายประการที่ต้องปฏิบัติเช่นมี ISP, โมเด็มและ / หรือเราเตอร์เปิดอยู่, แล็ปท็อปของฉันเปิดอยู่ ฯลฯ มันค่อนข้างง่ายและถ้ามี ความต้องการเหล่านั้นไม่เป็นไปตามผลลัพธ์ - แล็ปท็อปของฉันเชื่อมต่อกับอินเทอร์เน็ต - ไม่เกิดขึ้น.
เงื่อนไขในขอบเขตของการคำนวณทำงานคล้ายกัน เราสามารถทดสอบว่าสตริงตรงกับสายอื่นไม่ว่าจะไม่ตรงกับสายอื่นหรือแม้ว่ามันจะมีอยู่ทั้งหมด ในทำนองเดียวกันเราสามารถทดสอบข้อโต้แย้งเชิงตัวเลขเพื่อดูว่าข้อใดข้อหนึ่งนั้นยอดเยี่ยมกว่าน้อยกว่าหรือเท่ากับอีกข้อหนึ่ง ในการทำให้บางสิ่งเกิดขึ้นหลังจากตรงตามเงื่อนไขของการทดสอบเราจะใช้คำสั่ง“ if-then” รูปแบบของพวกเขาค่อนข้างเรียบง่าย.
ถ้าเงื่อนไข
แล้วก็
Command1
Command2
...
CommandN
Fi
ถ้างบ
เรามาทดสอบสคริปต์สั้น ๆ กันเถอะ?
ถ้าทดสอบ $ 1 -gt $ 2
แล้วก็
echo“ $ 1 มากกว่า $ 2”
Fi
คุณจะสังเกตเห็นว่าเมื่อเงื่อนไขนั้นเป็นจริงสคริปต์จะเรียกใช้คำสั่งต่อไปนี้ มิฉะนั้นคำสั่ง“ ถ้า” จะออก หากมีคำสั่งใด ๆ หลังจากคำสั่ง“ if” คำสั่งนั้นจะทำงานตามปกติ ฉันเพิ่มบรรทัดต่อไปนี้ที่ส่วนท้ายของสคริปต์ด้านบนเพื่อแสดงสิ่งนี้:
echo“ นี่มาหลังจากคำสั่ง if”
นี่คือโอเปอเรเตอร์ตัวเลขอื่น ๆ ที่คุณอาจต้องการลองใช้:
- -eq: เท่ากับ
- -NE: ไม่เท่ากับ
- -lt: น้อยกว่า
- -le: น้อยกว่าหรือเท่ากับ
- -gt: มากกว่า
- -ge: มากกว่าหรือเท่ากับ
สายการทดสอบ
ตอนนี้ถ้าเราปรับเปลี่ยนบรรทัดแรกของสคริปต์เป็น:
ถ้าทดสอบ $ 1 = $ 2
จากนั้นเงื่อนไขจะทดสอบว่าทั้งสองมีค่าเท่ากันหรือไม่ แม้ว่าจะมีการจับที่นี่ !! การใช้เครื่องหมายเท่ากับ (=) เปรียบเทียบสองสตริงและไม่ใช่ตัวเลข หากคุณต้องการเปรียบเทียบตัวเลขคุณจะต้องใช้โอเปอเรเตอร์“ -eq” คล้ายกับวิธีที่เราใช้“ -gt” ด้านบน.
ตอนนี้เรามาทำการเปลี่ยนแปลงอื่น ๆ :
ถ้าทดสอบ $ 1! = $ 2
การรวมเครื่องหมายอัศเจรีย์ (!) ทำหน้าที่เป็นตัวปรับ "ไม่ใช่" นั่นคือมันรันเฉพาะคำสั่งต่อไปนี้เมื่อทั้งสองสายไม่ตรงกัน.
นี่คือรายการของการทดสอบแบบอิงสตริงที่คุณสามารถใช้ได้:
- string: การใช้เพียงแค่ข้อโต้แย้งด้วยตัวเองทดสอบว่าสตริงไม่ว่าง (null) หรือไม่ได้กำหนดไว้อย่างใด
- -n string: สิ่งนี้จะทดสอบว่าสตริงนั้นไม่ว่างเปล่าและมีการกำหนดไว้หรือไม่
- -z string: สิ่งนี้จะทดสอบว่าสตริงว่างหรือไม่และถูกกำหนดด้วยวิธีนั้น
มีอะไรอีกถ้า?
ฉันจะยอมรับชื่อส่วนนั้นแน่นอนปุนไม่ดี โอเคเรารู้วิธีเรียกใช้งานคำสั่งหากการทดสอบเป็นจริง แต่ถ้าเราต้องการเรียกใช้คำสั่งอื่นถ้ามันเป็นเท็จ เราสามารถรวมสองส่วนเข้าด้วยกันได้อย่างง่ายดายโดยการเพิ่มหัวข้อในคำสั่ง“ if-then” ของเรา -“ อื่น ๆ ”!
ถ้าเงื่อนไข
แล้วก็
Command1
Command2
...
CommandN
อื่น
Command1
Command2
...
CommandN
Fi
มารวมกันเป็นสคริปต์ง่ายๆ.
มีทุกอย่างพร้อมการเยื้องที่เหมาะสม หากคุณมองอย่างใกล้ชิดคุณจะสังเกตเห็นว่าเราใช้วงเล็บเหลี่ยม ([และ]) แทนคำสั่งทดสอบ พวกมันใช้งานได้ตามวัตถุประสงค์ของเราและคุณมีแนวโน้มที่จะเห็นวงเล็บเหลี่ยมมากขึ้นด้วยเหตุผลต่าง ๆ ดังนั้นเราจะใช้พวกมันต่อจากนี้ไป.
นี่คือลักษณะของผลลัพธ์:
มันง่ายมาก!
ฉันทำอะไรตอนนี้?
ตอนนี้คุณรู้วิธีใช้คำสั่ง“ if-then-else” แล้วคุณสามารถเรียกใช้สคริปต์ที่สามารถทำการทดสอบได้ ตัวอย่างเช่นคุณสามารถเรียกใช้สคริปต์ที่จะคำนวณแฮช md5 ของไฟล์แล้วเปรียบเทียบกับไฟล์ที่คุณดาวน์โหลดในไฟล์เพื่อดูว่าตรงกันหรือไม่.
สำหรับคะแนนโบนัสบางส่วนคุณสามารถสร้างสคริปต์ที่มีลูป“ สำหรับ” แต่ใช้เงื่อนไขการทดสอบแทนการอ่านบรรทัดจากไฟล์รายการ ...
เราได้รับส่วนที่น่าสนใจมากขึ้นในคู่มือผู้เริ่มต้นสู่การเขียนสคริปต์เชลล์ หากคุณพลาดบทเรียนก่อนหน้านี้ต่อไปนี้เป็นรายการย่อสำหรับให้คุณลองดู:
- พื้นฐานของการเขียนสคริปต์เชลล์
- ใช้สำหรับลูป
- คำสั่งพื้นฐานเพิ่มเติม
- อะไรคือความแตกต่างระหว่าง Linux shells?
- วิธีใช้นิพจน์ปกติพื้นฐาน
หากคุณสร้างหรือใช้สคริปต์ที่ใช้เงื่อนไขการทดสอบ, คำสั่ง if-then-else และลูป“ for” ให้แบ่งปันความคิดเห็นกับเรา!