วิธีการใช้เงื่อนไขการทดสอบภายในสคริปต์ Bash

คำสั่งทดสอบสามารถใช้ในบรรทัดคำสั่ง Linux เพื่อเปรียบเทียบองค์ประกอบหนึ่งกับอีกระบบหนึ่ง แต่ใช้กันมากขึ้นใน สคริปต์เชลล์ BASH เป็นส่วนหนึ่งของ งบเงื่อนไข ที่ควบคุมการทำงานของลอจิกและการไหลของโปรแกรม

ตัวอย่างพื้นฐาน

คุณสามารถลองคำสั่งเหล่านี้ได้ง่ายๆโดยการ เปิดหน้าต่างเทอร์มินัล

ทดสอบ 1 -eq 2 && echo "ใช่" || ก้อง "ไม่"

คำสั่งดังกล่าวสามารถแบ่งออกได้ดังนี้:

โดยนัยคำสั่งจะเปรียบเทียบ 1 ถึง 2 และตรงกับคำสั่ง "echo" ที่ทำงานอยู่ซึ่งจะแสดงคำว่า "ใช่" และหากไม่ตรงกับคำสั่ง "echo" จะปรากฏขึ้น "no"

การเปรียบเทียบตัวเลข

ถ้าคุณกำลังเปรียบเทียบองค์ประกอบที่แยกวิเคราะห์เป็นตัวเลขคุณสามารถใช้ตัวดำเนินการเปรียบเทียบต่อไปนี้:

ตัวอย่าง:

ทดสอบ 1 -eq 2 && echo "ใช่" || ก้อง "ไม่"

(แสดง "ไม่" ไปที่หน้าจอเพราะ 1 ไม่เท่ากับ 2)

ทดสอบ 1 -ge 2 && echo "ใช่" || ก้อง "ไม่"

(แสดง "ไม่" ไปที่หน้าจอเพราะ 1 ไม่มากกว่าหรือเท่ากับ 2)

ทดสอบ 1-gt 2 && echo "ใช่" || ก้อง "ไม่"

(แสดง "ไม่" ไปที่หน้าจอเพราะ 1 ไม่เกิน 2)

ทดสอบ 1 -le 2 & & echo "ใช่" || ก้อง "ไม่"

(แสดง "ใช่" ไปที่หน้าจอเพราะ 1 น้อยกว่าหรือเท่ากับ 2)

ทดสอบ 1 -lt 2 && echo "ใช่" || ก้อง "ไม่"

(แสดง "ใช่" ไปที่หน้าจอเพราะ 1 น้อยกว่าหรือเท่ากับ 2)

ทดสอบ 1 -ne 2 & & echo "ใช่" || ก้อง "ไม่"

(แสดง "ใช่" ไปที่หน้าจอเพราะ 1 ไม่เท่ากับ 2)

การเปรียบเทียบข้อความ

ถ้าคุณกำลังเปรียบเทียบองค์ประกอบที่แยกวิเคราะห์เป็นสายคุณสามารถใช้ตัวดำเนินการเปรียบเทียบต่อไปนี้:

ตัวอย่าง:

ทดสอบ "string1" = "string2" && echo "ใช่" || ก้อง "ไม่"

(แสดง "ไม่" ไปที่หน้าจอเพราะ "string1" ไม่เท่ากับ "string2")

ทดสอบ "string1"! = "string2" && echo "ใช่" || ก้อง "ไม่"

(แสดง "ใช่" ไปที่หน้าจอเพราะ "string1" ไม่เท่ากับ "string2")

ทดสอบ - n "string1" && echo "ใช่" || ก้อง "ไม่"

(แสดง "ใช่" ไปที่หน้าจอเพราะ "string1" มีความยาวของสตริงมากกว่าศูนย์)

ทดสอบ -z "string1" && echo "ใช่" || ก้อง "ไม่"

(แสดง "ไม่" ไปยังหน้าจอเพราะ "string1" มีความยาวของสตริงมากกว่าศูนย์)

การเปรียบเทียบไฟล์

หากคุณเปรียบเทียบไฟล์คุณสามารถใช้ตัวดำเนินการเปรียบเทียบต่อไปนี้:

ตัวอย่าง:

ทดสอบ / เส้นทาง / ไป / file1 -n / path / to / file2 & & echo "ใช่"

(ถ้าไฟล์ 1 ใหม่กว่าไฟล์ 2 จะปรากฏคำว่า "ใช่")

ทดสอบ -e-path / to / file1 & & echo "yes"

(ถ้าไฟล์ 1 มีคำว่า "ใช่" จะปรากฏขึ้น)

ทดสอบ -O / path / to / file1 & & echo "ใช่"

(ถ้าคุณเป็นเจ้าของไฟล์ 1 คำว่า "ใช่" จะปรากฏขึ้น ")

คำศัพท์

เปรียบเทียบเงื่อนไขหลายข้อ

ดังนั้นทุกอย่างได้รับการเปรียบเทียบสิ่งหนึ่งกับอีก แต่สิ่งที่ถ้าคุณต้องการที่จะเปรียบเทียบสองเงื่อนไข

ตัวอย่างเช่นถ้าสัตว์มีขา 4 ตัวและไป "หมู" ก็อาจจะเป็นวัว เพียงแค่ตรวจสอบขา 4 ไม่ได้รับประกันว่าคุณมีวัว แต่ตรวจสอบเสียงที่ทำให้มันไม่แน่นอน

ในการทดสอบเงื่อนไขทั้งสองนี้ในครั้งเดียวให้ใช้ข้อความต่อไปนี้:

test 4-eq 4 -a "moo" = "moo" & & echo "เป็นวัว" || echo "ไม่ใช่วัว"

ส่วนสำคัญที่นี่คือ - ซึ่งย่อมาจากและ.

มีวิธีการที่ดีและใช้กันทั่วไปในการทำแบบทดสอบเดียวกันและมีดังต่อไปนี้:

test 4 -eq 4 && test "moo" = "moo" & & echo "เป็นวัว" || echo "ไม่ใช่วัว"

การทดสอบอื่นที่คุณอาจต้องการทำคือการเปรียบเทียบข้อความสองข้อและถ้าข้อความใดเป็นผลลัพธ์อย่างแท้จริง ตัวอย่างเช่นถ้าคุณต้องการตรวจสอบว่ามีไฟล์ชื่อ "file1.txt" หรือมีไฟล์ชื่อ "file1.doc" อยู่คุณสามารถใช้คำสั่งต่อไปนี้ได้

test -e file1.txt -o -e file1.doc && echo "มีไฟล์อยู่แล้ว" || echo "file1 ไม่มีอยู่"

ส่วนสำคัญที่นี่คือ -o ซึ่งย่อมาจากหรือ

มีวิธีการที่ดีและใช้กันทั่วไปในการทำแบบทดสอบเดียวกันและมีดังต่อไปนี้:

test -e file1.txt || test -e file1.doc && echo "มีไฟล์อยู่แล้ว" || echo "file1 ไม่มีอยู่"

การกำจัดคำหลักทดสอบ

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

[-e file1.txt] && echo "มีไฟล์อยู่แล้ว" || echo "file1 ไม่มีอยู่"

[และ] โดยทั่วไปหมายถึงเช่นเดียวกับการทดสอบ

ตอนนี้คุณรู้ดีว่าคุณสามารถปรับปรุงเงื่อนไขต่างๆได้ดังนี้

[4-eq 4] && ["moo" = "moo"] & & echo "เป็นวัว" || echo "ไม่ใช่วัว"

[-e file1.txt] || [-e file1.doc] && echo "ไฟล์ 1 อยู่" || echo "file1 ไม่มีอยู่"

สรุป

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