คำสั่งทดสอบสามารถใช้ในบรรทัดคำสั่ง Linux เพื่อเปรียบเทียบองค์ประกอบหนึ่งกับอีกระบบหนึ่ง แต่ใช้กันมากขึ้นใน สคริปต์เชลล์ BASH เป็นส่วนหนึ่งของ งบเงื่อนไข ที่ควบคุมการทำงานของลอจิกและการไหลของโปรแกรม
ตัวอย่างพื้นฐาน
คุณสามารถลองคำสั่งเหล่านี้ได้ง่ายๆโดยการ เปิดหน้าต่างเทอร์มินัล
ทดสอบ 1 -eq 2 && echo "ใช่" || ก้อง "ไม่"
คำสั่งดังกล่าวสามารถแบ่งออกได้ดังนี้:
- ทดสอบ - หมายความว่าคุณกำลังจะทำการเปรียบเทียบ
- 1 - องค์ประกอบแรกที่คุณจะเปรียบเทียบ
- -eq (คุณเปรียบเทียบได้อย่างไรในกรณีนี้คุณกำลังทดสอบว่าหมายเลขหนึ่งมีค่าเท่ากับจำนวนอื่นหรือไม่)
- 2 - องค์ประกอบที่คุณกำลังเปรียบเทียบองค์ประกอบแรกอีกครั้ง
- && - เรียกใช้ข้อความต่อไปนี้หากผลลัพธ์เป็นจริง
- echo "yes" - คำสั่งให้รันถ้าการเปรียบเทียบส่งกลับ true
- || - เรียกใช้คำสั่งต่อไปนี้หากผลเป็นเท็จ
- echo "no" - คำสั่งให้รันถ้าการเปรียบเทียบส่งกลับ false
โดยนัยคำสั่งจะเปรียบเทียบ 1 ถึง 2 และตรงกับคำสั่ง "echo" ที่ทำงานอยู่ซึ่งจะแสดงคำว่า "ใช่" และหากไม่ตรงกับคำสั่ง "echo" จะปรากฏขึ้น "no"
การเปรียบเทียบตัวเลข
ถ้าคุณกำลังเปรียบเทียบองค์ประกอบที่แยกวิเคราะห์เป็นตัวเลขคุณสามารถใช้ตัวดำเนินการเปรียบเทียบต่อไปนี้:
- -eq - ค่า 1 มีค่าเท่ากับ 2
- -ge - มีค่ามากกว่าหรือเท่ากับค่า 2
- -gt - เป็นค่า 1 มากกว่าค่า 2
- -le คือค่า 1 น้อยกว่าหรือเท่ากับค่า 2
- -lt - มีค่า 1 น้อยกว่าค่า 2
- -1 มีค่า 1 ค่าไม่เท่ากัน 2
ตัวอย่าง:
ทดสอบ 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)
การเปรียบเทียบข้อความ
ถ้าคุณกำลังเปรียบเทียบองค์ประกอบที่แยกวิเคราะห์เป็นสายคุณสามารถใช้ตัวดำเนินการเปรียบเทียบต่อไปนี้:
- = - สตริงที่ตรงกับสตริง 1
- ! = - เป็นสตริงที่แตกต่างจากสตริงที่ 2
- -n คือความยาวสายอักขระมากกว่า 0
- -z เป็นความยาวของสายอักขระ 0
ตัวอย่าง:
ทดสอบ "string1" = "string2" && echo "ใช่" || ก้อง "ไม่"
(แสดง "ไม่" ไปที่หน้าจอเพราะ "string1" ไม่เท่ากับ "string2")
ทดสอบ "string1"! = "string2" && echo "ใช่" || ก้อง "ไม่"
(แสดง "ใช่" ไปที่หน้าจอเพราะ "string1" ไม่เท่ากับ "string2")
ทดสอบ - n "string1" && echo "ใช่" || ก้อง "ไม่"
(แสดง "ใช่" ไปที่หน้าจอเพราะ "string1" มีความยาวของสตริงมากกว่าศูนย์)
ทดสอบ -z "string1" && echo "ใช่" || ก้อง "ไม่"
(แสดง "ไม่" ไปยังหน้าจอเพราะ "string1" มีความยาวของสตริงมากกว่าศูนย์)
การเปรียบเทียบไฟล์
หากคุณเปรียบเทียบไฟล์คุณสามารถใช้ตัวดำเนินการเปรียบเทียบต่อไปนี้:
- -ef - ไฟล์มีหมายเลขเดียวกันและหมายเลขไอออน (เป็นไฟล์เดียวกันหรือไม่)
- -nt - เป็นไฟล์ตัวแรกที่ใหม่กว่าไฟล์ที่สอง
- -ot - ไฟล์แรกมีอายุมากกว่าไฟล์ที่สอง
- -b - แฟ้มมีอยู่และเป็นบล็อกพิเศษ
- -c - ไฟล์มีอยู่และเป็นอักขระพิเศษ
- -d- ไฟล์มีอยู่และเป็นไดเร็กทอรี
- -e - ไฟล์มีอยู่
- -f- ไฟล์มีอยู่และเป็นไฟล์ปกติ
- -g - มีไฟล์อยู่และมีหมายเลขกลุ่มที่ระบุ
- -G - ไฟล์มีอยู่และเจ้าของโดยกลุ่มของผู้ใช้
- -h - ไฟล์มีอยู่และเป็น ลิงค์สัญลักษณ์
- -k - แฟ้มมีอยู่และมีชุดบิตเหนียวของมัน
- -L - เหมือนกับ -h
- -O - ไฟล์นี้เป็นเจ้าของแล้ว
- -p - ไฟล์มีอยู่และเป็นท่อที่มีชื่อ
- -r - ไฟล์มีอยู่และสามารถอ่านได้
- -s - ไฟล์มีอยู่และมีขนาดใหญ่กว่าศูนย์
- -S - ไฟล์มีอยู่และเป็นซ็อกเก็ต
- -t - descriptor ไฟล์ถูกเปิดขึ้นบนเทอร์มินัล
- -u - มีไฟล์อยู่และตั้งค่าบิตผู้ใช้ set-user-id
- -w ไฟล์มีอยู่และสามารถเขียนได้
- -x - ไฟล์มีอยู่และเป็นไฟล์ปฏิบัติการ
ตัวอย่าง:
ทดสอบ / เส้นทาง / ไป / 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 ไม่มีอยู่"
สรุป
คำสั่งทดสอบมีประโยชน์มากกว่าในสคริปต์เนื่องจากคุณสามารถทดสอบค่าหนึ่งตัวแปรกับอีกอันหนึ่งและควบคุมการไหลของโปรแกรม ในบรรทัดคำสั่งมาตรฐานคุณสามารถใช้เพื่อทดสอบว่าไฟล์มีอยู่หรือไม่