A day with Scandale - Harmonie Collection - Spring / Summer 2013
สารบัญ:
if
คำชี้แจงif..else
แถลงการณ์if..elif..else
แถลงการณ์- ซ้อนกัน
if
งบ - หลายเงื่อนไข
- ผู้ประกอบการทดสอบ
- ข้อสรุป
การตัดสินใจเป็นหนึ่งในแนวคิดพื้นฐานที่สุดของการเขียนโปรแกรมคอมพิวเตอร์ เช่นเดียวกับในภาษาการเขียนโปรแกรมอื่น ๆ
if
if..else
if..elif..else
และซ้อนกัน
if
สามารถใช้คำสั่งใน Bash เพื่อรันโค้ดตามเงื่อนไขที่กำหนด
ในบทช่วยสอนนี้เราจะแนะนำคุณเกี่ยวกับพื้นฐานของ Bash
if
คำสั่งและแสดงวิธีใช้มันในเชลล์สคริปต์ของคุณ
if
คำชี้แจง
ทุบตี
if
เงื่อนไขสามารถมีรูปแบบที่แตกต่างกัน คำสั่ง
if
พื้นฐานที่สุดจะใช้แบบฟอร์มต่อไปนี้:
if TEST-COMMAND then STATEMENTS fi
คำสั่ง
if
เริ่มต้นด้วยคีย์เวิร์ด
if
ตามด้วยนิพจน์เงื่อนไขและคีย์เวิร์ด คำสั่งนั้นลงท้ายด้วยคำสำคัญ
fi
หาก
TEST-COMMAND
ประเมินค่าเป็น
True
STATEMENTS
จะถูกดำเนินการ หาก
TEST-COMMAND
ส่งกลับค่า
False
จะไม่มีอะไรเกิดขึ้น
STATEMENTS
จะถูกละเว้น
โดยทั่วไปเป็นแนวปฏิบัติที่ดีเสมอในการเยื้องรหัสของคุณและการแยกบล็อคโค้ดด้วยบรรทัดว่าง คนส่วนใหญ่เลือกที่จะใช้การเว้นวรรค 4 หรือ 2 ช่องว่าง การเยื้องและบรรทัดว่างทำให้โค้ดของคุณอ่านและจัดการได้ง่ายขึ้น
ลองดูตัวอย่างสคริปต์ต่อไปนี้ที่ตรวจสอบว่าตัวเลขที่กำหนดมีค่ามากกว่า 10
#!/bin/bash echo -n "Enter a number: " read VAR if] then echo "The variable is greater than 10." fi
บันทึกรหัสในไฟล์และเรียกใช้จากบรรทัดคำสั่ง:
bash test.sh
สคริปต์จะแจ้งให้คุณป้อนหมายเลข หากตัวอย่างเช่นคุณป้อน 15 คำสั่ง
test
จะประเมิน
true
เพราะ 15 มากกว่า 10 และคำสั่ง
echo
ภายในส่วนคำสั่ง
then
จะถูกดำเนินการ
The variable is greater than 10.
if..else
แถลงการณ์
คำสั่ง Bash
if..else
ใช้แบบฟอร์มต่อไปนี้:
if TEST-COMMAND then STATEMENTS1 else STATEMENTS2 fi
หาก
TEST-COMMAND
ประเมินค่าเป็น
True
แล้ว
STATEMENTS1
จะถูกเรียกใช้งาน มิฉะนั้นหาก
TEST-COMMAND
ส่งคืนค่า
False
STATEMENTS2
จะถูกเรียกใช้งาน คุณสามารถมีเพียงประโยคเดียวในคำสั่ง
ลองเพิ่มส่วนคำสั่ง
else
ในสคริปต์ตัวอย่างก่อนหน้านี้:
#!/bin/bash echo -n "Enter a number: " read VAR if] then echo "The variable is greater than 10." else echo "The variable is equal or less than 10." fi
if..elif..else
แถลงการณ์
Bash
if..elif..else
ใช้แบบฟอร์มต่อไปนี้:
if TEST-COMMAND1 then STATEMENTS1 elif TEST-COMMAND2 then STATEMENTS2 else STATEMENTS3 fi
หาก
TEST-COMMAND1
ประเมินเป็น
True
แล้ว
STATEMENTS1
จะถูกเรียกใช้งาน หาก
TEST-COMMAND2
ค่าเป็น
True
จะมีการเรียกใช้
STATEMENTS2
หากไม่มีคำสั่งทดสอบที่ประเมินเป็น
True
จะดำเนินการ
STATEMENTS2
คุณสามารถมีอย่างน้อยหนึ่งประโยคในคำสั่ง ส่วนคำสั่ง
else
เป็นตัวเลือก
เงื่อนไขจะถูกประเมินตามลำดับ เมื่อเงื่อนไขส่งคืน
True
เงื่อนไขที่เหลือจะไม่ถูกดำเนินการและการควบคุมโปรแกรมจะย้ายไปยังจุดสิ้นสุดของข้อความสั่ง
if
ลองเพิ่ม
elif
clause ไปที่สคริปต์ก่อนหน้านี้:
#!/bin/bash echo -n "Enter a number: " read VAR if] then echo "The variable is greater than 10." elif] then echo "The variable is equal to 10." else echo "The variable is less than 10." fi
ซ้อนกัน
if
งบ
Bash อนุญาตให้คุณซ้อนคำสั่งใน
if
statement คุณสามารถวางหลายคำสั่ง
if
ในอีกคำสั่ง
if
สคริปต์ต่อไปนี้จะแจ้งให้คุณป้อนหมายเลขสามตัวและจะพิมพ์หมายเลขที่ใหญ่ที่สุดในบรรดาสามหมายเลข
#!/bin/bash echo -n "Enter the first number: " read VAR1 echo -n "Enter the second number: " read VAR2 echo -n "Enter the third number: " read VAR3 if] then if] then echo "$VAR1 is the largest number." else echo "$VAR3 is the largest number." fi else if] then echo "$VAR2 is the largest number." else echo "$VAR3 is the largest number." fi fi
นี่คือลักษณะของเอาต์พุต:
Enter the first number: 4 Enter the second number: 7 Enter the third number: 2 7 is the largest number.
แทนที่จะใช้คำสั่งซ้อน
if
คำสั่งมักจะมีประสิทธิภาพมากกว่าในการใช้คำสั่ง case
หลายเงื่อนไข
ตัวดำเนินการเชิงตรรกะ
OR
และ
AND
อนุญาตให้คุณใช้หลายเงื่อนไขในคำสั่ง
if
นี่เป็นอีกเวอร์ชั่นของสคริปต์ที่จะพิมพ์ตัวเลขที่ใหญ่ที่สุดในบรรดาสามตัวเลข ในรุ่นนี้แทนที่จะเป็นคำสั่งที่ซ้อนกันเราจะใช้ตัวดำเนินการตรรกะ
AND
(
&&
)
#!/bin/bash echo -n "Enter the first number: " read VAR1 echo -n "Enter the second number: " read VAR2 echo -n "Enter the third number: " read VAR3 if] &&] then echo "$VAR1 is the largest number." elif] &&] then echo "$VAR2 is the largest number." else echo "$VAR3 is the largest number." fi
ผู้ประกอบการทดสอบ
ใน Bash คำสั่ง
test
ใช้หนึ่งในรูปแบบไวยากรณ์ต่อไปนี้:
test EXPRESSION]
ในการปฏิเสธนิพจน์ทดสอบให้ใช้ตัวดำเนินการ
NOT
(
!
) แบบโลจิคัล เมื่อเปรียบเทียบสตริงจะใช้เครื่องหมายคำพูดเดี่ยวหรือคู่เสมอเพื่อหลีกเลี่ยงปัญหาการแยกคำหรือกลมกลืน
ด้านล่างนี้คือโอเปอเรเตอร์ที่ใช้บ่อยที่สุด:
-
-n
VAR
- จริงถ้าความยาวของ VAR มากกว่าศูนย์-z
VAR
- จริงถ้า VAR ว่างเปล่าSTRING1 = STRING2
- จริง [STRING1 และ STRING2 เท่ากันSTRING1 != STRING2
- True STRING1 และ STRING2 ไม่เท่ากันINTEGER1 -eq INTEGER2
- True INTEGER1 และ INTEGER2 เท่ากันINTEGER1 -gt INTEGER2
- True INTEGER1 มากกว่า INTEGER2INTEGER1 -lt INTEGER2
- True INTEGER1 น้อยกว่า INTEGER2INTEGER1 -ge INTEGER2
- True INTEGER1 เท่ากับหรือมากกว่า INTEGER2INTEGER1 -le INTEGER2
- True INTEGER1 มีค่าเท่ากับหรือน้อยกว่า INTEGER2-h
FILE
- จริงถ้าไฟล์นั้นมีอยู่และเป็นลิงก์สัญลักษณ์-r
FILE
- จริงถ้าไฟล์นั้นมีอยู่และสามารถอ่านได้-w
FILE
- จริงถ้าไฟล์นั้นมีอยู่และเขียนได้-x
FILE
- จริงถ้าไฟล์นั้นมีอยู่และสามารถใช้งานได้-d
FILE
- จริงถ้าไฟล์นั้นมีอยู่และเป็นไดเรกทอรี-e
FILE
- จริงถ้าไฟล์นั้นมีอยู่และเป็นไฟล์โดยไม่คำนึงถึงประเภท (โหนด, ไดเรกทอรี, ซ็อกเก็ต ฯลฯ)-f
FILE
- จริงถ้าไฟล์นั้นมีอยู่และเป็นไฟล์ปกติ (ไม่ใช่ไดเรกทอรีหรืออุปกรณ์)
ข้อสรุป
คำสั่ง
if
,
if..else
และ
if..elif..else
อนุญาตให้คุณควบคุมโฟลว์ของการดำเนินการของสคริปต์ Bash โดยการประเมินเงื่อนไขที่กำหนด