01 จาก 08
คู่มือเริ่มต้นใช้งานกับ BASH - เปรียบเทียบสิ่งต่างๆ
ในส่วนก่อนหน้าของการกวดวิชา BASH เราดูที่ ข้อความเงื่อนไข
คำแนะนำนั้นยาวมาก แต่จริงๆแล้วมีเพียงวิธีการควบคุมการไหลของตรรกะเท่านั้น คู่มือนี้แสดงวิธีต่างๆที่คุณสามารถเปรียบเทียบตัวแปรได้
ภาพด้านบนแสดงตัวอย่างแรกในคู่มือในสัปดาห์นี้:
#! / bin / ทุบตี
name1 = "แกรี่"
name2 = "บ๊อบ"หาก ["$ name1" = "$ name2"]
แล้วก็
echo "ชื่อตรงกัน"
อื่น
echo "ชื่อไม่ตรงกัน"
Fi
ในสคริปต์ด้านบนฉันได้กำหนดตัวแปรสองตัวที่ชื่อ name1 และ name2 และกำหนดค่า "gary" และ "bob" เนื่องจากตัวแปรมีอยู่ระหว่างเครื่องหมายคำพูดพวกเขาเรียกว่าตัวแปรสตริงซึ่งมีความเกี่ยวข้องมากขึ้นเมื่อการสอนทำขึ้น
สคริปต์ทั้งหมดจะเปรียบเทียบค่าของ $ name1 และ $ name2 และหากตรงกับผลลัพธ์สตริง "ชื่อตรงกัน" และหากไม่ได้ส่งออกสตริง "ชื่อไม่ตรงกัน"
เครื่องหมายอัญประกาศรอบตัวแปร $ name1 และ $ name2 มีความสำคัญเนื่องจากหากค่าของค่าใด ๆ ยังไม่ได้ตั้งค่าไว้สคริปต์จะยังคงทำงานอยู่
ตัวอย่างเช่นถ้าไม่มีชื่อ $ name1 คุณจะเปรียบเทียบ "" กับ "bob" หากไม่มีเครื่องหมายอัญประกาศคุณจะทิ้ง = "bob" ไว้อย่างชัดเจน
นอกจากนี้คุณยังสามารถใช้! = notation เพื่อกำหนดค่าไม่เท่ากับดังนี้:
หาก ["$ name1"! = "$ name2"]
02 จาก 08
คู่มือเริ่มต้นใช้งานกับ BASH - เปรียบเทียบสตริง
ในตัวอย่างข้างต้นการทดสอบเปรียบเทียบสองสตริงและถามคำถามว่า Gary มาก่อน Bob ในตัวอักษรหรือไม่?
เห็นได้ชัดว่าคำตอบคือไม่
สคริปต์แนะนำผู้ให้บริการน้อยกว่า (<) เนื่องจากโอเปอเรเตอร์น้อยกว่าจะใช้สำหรับการเปลี่ยนเส้นทางคุณต้องหนีด้วยเครื่องหมายทับ (\) เพื่อให้มีค่าเฉลี่ยน้อยกว่าซึ่งเป็นเหตุผลว่าทำไมในสคริปต์ด้านบนจึงเปรียบเทียบ "$ name1" \ <"$ name2"
ตรงกันข้ามน้อยกว่าจะเห็นได้ชัดกว่า แทนที่จะใช้ \
ตัวอย่างเช่น
หาก ["$ name1" \ "" $ name2 "]
03 จาก 08
คู่มือเริ่มต้นใช้งานกับ BASH - เปรียบเทียบสตริง
ถ้าคุณต้องการทดสอบว่าตัวแปรมีค่าคุณสามารถใช้การทดสอบต่อไปนี้ได้หรือไม่:
ถ้า [-n $ name2]
ในสคริปต์ด้านบนฉันได้ทดสอบว่าชื่อ $ name2 ได้รับค่าหรือไม่ถ้าข้อความ "ไม่มี Bob ไม่เคยมี Bob ปรากฏ"
04 จาก 08
คู่มือเริ่มต้นใช้งานกับ BASH - เปรียบเทียบสตริง
ในสไลด์ที่ผ่านมาเราได้กล่าวถึงว่ามีการตั้งค่าตัวแปรหรือไม่ บางครั้งอาจมีการตั้งค่าตัวแปร แต่อาจไม่มีค่าจริง
ตัวอย่างเช่น
name1 = ""
เมื่อต้องการทดสอบว่าตัวแปรมีค่าหรือไม่ (เช่นมีความยาวเป็นศูนย์) ให้ใช้ -z ดังนี้:
ถ้า [-z $ name1]
ในสคริปต์ข้างต้นฉันได้ตั้ง $ name1 เป็นสตริงความยาวเป็นศูนย์และเปรียบเทียบแล้วโดยใช้ -z ถ้าชื่อ $ name1 มีความยาวเป็นศูนย์ข้อความ "gary ออกไปตอนเย็น" จะปรากฏขึ้น
05 จาก 08
คู่มือเริ่มต้นใช้กับ BASH - เปรียบเทียบตัวเลข
ดังนั้นการเปรียบเทียบทั้งหมดได้รับสำหรับสตริง สิ่งที่เกี่ยวกับการเปรียบเทียบตัวเลข?
สคริปต์ข้างต้นแสดงตัวอย่างของการเปรียบเทียบตัวเลขสองตัว:
#! / bin / ทุบตี
A = 4
ข = 5ถ้า [$ a = $ b]
แล้วก็
echo "4 = 5"
อื่น
echo "4 ไม่เท่ากับ 5"
Fi
หากต้องการตั้งค่าตัวแปรให้เป็นตัวเลขให้ตั้งค่าโดยไม่ใช้เครื่องหมายอัญประกาศ จากนั้นคุณสามารถเปรียบเทียบตัวเลขที่มีเครื่องหมายเท่ากับได้
ฉันชอบใช้โอเปอเรเตอร์ต่อไปนี้เพื่อเปรียบเทียบตัวเลขสอง:
ถ้า [$ a -eq $ b]
06 จาก 08
คู่มือเริ่มต้นใช้กับ BASH - เปรียบเทียบตัวเลข
ถ้าคุณต้องการเปรียบเทียบว่าจำนวนน้อยกว่าหมายเลขอื่นคุณสามารถใช้ตัวดำเนินการน้อยกว่า (<) เช่นเดียวกับสตริงที่คุณต้องหนีน้อยกว่าผู้ประกอบการด้วยเครื่องหมายทับ (\ <)
วิธีที่ดีกว่าในการเปรียบเทียบตัวเลขคือการใช้สัญกรณ์ต่อไปนี้แทน:
- น้อยกว่า -lt
- น้อยกว่าหรือเท่ากับ -le
- มากกว่า - จีที
- มากกว่าหรือเท่ากับ -ge
ตัวอย่างเช่น:
ถ้า [$ a-lt $ b]
ถ้า [$ a -le $ b]
ถ้า [$ a -ge $ b]
ถ้า [$ a-gt $ b]
07 จาก 08
คู่มือเริ่มต้นใช้กับ BASH - เปรียบเทียบตัวเลข
สุดท้ายสำหรับคู่มือนี้ถ้าคุณต้องการทดสอบว่าตัวเลขสองตัวแตกต่างกันหรือไม่คุณสามารถใช้โอเปอเรเตอร์น้อยกว่าและมากกว่าโอเปอเรเตอร์ร่วมกัน (<>) หรือ -ne ดังนี้:
ถ้า [$ a <> $ b]
ถ้า [$ a -ne $ b]
08 ใน 08
คู่มือเริ่มต้นใช้งานกับตัวดำเนินการเปรียบเทียบ - สรุป
หากคุณพลาดสามส่วนแรกของคู่มือนี้คุณสามารถค้นหาได้โดยคลิกที่ลิงก์ต่อไปนี้:
ในส่วนถัดไปของคู่มือฉันจะครอบคลุมเลขคณิต