Skip to main content

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

Anonim

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

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

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

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

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

  • ทดสอบ - ซึ่งหมายความว่าคุณกำลังจะทำการเปรียบเทียบ
  • 1 - องค์ประกอบแรกที่คุณจะเปรียบเทียบ
  • -eq - คุณเปรียบเทียบได้อย่างไร ในกรณีนี้คุณกำลังทดสอบว่าหมายเลขหนึ่งมีค่าเท่ากับหมายเลขอื่นหรือไม่
  • 2 - องค์ประกอบที่คุณกำลังเปรียบเทียบองค์ประกอบแรกกับ
  • && - เรียกใช้ข้อความต่อไปนี้หากผลลัพธ์เป็นจริง
  • echo "yes" - คำสั่งให้รันถ้าการเปรียบเทียบส่งกลับ true
  • || - เรียกใช้คำสั่งต่อไปนี้หากผลเป็นเท็จ
  • echo "no" - คำสั่งให้รันถ้าการเปรียบเทียบส่งกลับค่า false

คำสั่ง "echo" จะถูกเรียกใช้ซึ่งจะแสดงเป็น "no." คำสั่ง "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 -nt / 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 ไม่มีอยู่"

สรุป

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