Unix / Linux - ตัวดำเนินการพื้นฐานของเชลล์

มีตัวดำเนินการต่างๆที่รองรับโดยแต่ละเชลล์ เราจะพูดถึงรายละเอียดเกี่ยวกับ Bourne shell (เชลล์เริ่มต้น) ในบทนี้

ตอนนี้เราจะพูดถึงตัวดำเนินการต่อไปนี้ -

  • ตัวดำเนินการเลขคณิต
  • ตัวดำเนินการเชิงสัมพันธ์
  • ตัวดำเนินการบูลีน
  • ตัวดำเนินการสตริง
  • ตัวดำเนินการทดสอบไฟล์

บอร์นเชลล์ไม่มีกลไกใด ๆ ในการดำเนินการทางคณิตศาสตร์อย่างง่าย แต่ใช้โปรแกรมภายนอกด้วยเช่นกัน awk หรือ expr.

ตัวอย่างต่อไปนี้แสดงวิธีการเพิ่มตัวเลขสองตัว -

#!/bin/sh

val=`expr 2 + 2`
echo "Total value : $val"

สคริปต์ด้านบนจะสร้างผลลัพธ์ต่อไปนี้ -

Total value : 4

ต้องพิจารณาประเด็นต่อไปนี้ในขณะที่เพิ่ม -

  • ต้องมีช่องว่างระหว่างตัวดำเนินการและนิพจน์ ตัวอย่างเช่น 2 + 2 ไม่ถูกต้อง ควรเขียนเป็น 2 + 2

  • นิพจน์ที่สมบูรณ์ควรอยู่ระหว่าง ‘ ‘เรียกว่า backtick

ตัวดำเนินการเลขคณิต

Bourne Shell รองรับตัวดำเนินการเลขคณิตต่อไปนี้

สมมติตัวแปร a ถือ 10 และตัวแปร b ถือ 20 แล้ว -

แสดงตัวอย่าง

ตัวดำเนินการ คำอธิบาย ตัวอย่าง
+ (เพิ่มเติม) เพิ่มค่าที่ด้านใดด้านหนึ่งของตัวดำเนินการ `expr $ a + $ b` จะให้ 30
- (การลบ) ลบตัวถูกดำเนินการทางขวามือออกจากตัวถูกดำเนินการด้านซ้าย `expr $ a - $ b` จะให้ -10
* (การคูณ) คูณค่าที่ด้านใดด้านหนึ่งของตัวดำเนินการ `expr $ a \ * $ b` จะให้ 200
/ (แผนก) แบ่งตัวถูกดำเนินการทางซ้ายด้วยตัวถูกดำเนินการทางขวามือ `expr $ b / $ a` จะให้ 2
% (โมดูลัส) แบ่งตัวถูกดำเนินการทางซ้ายด้วยตัวถูกดำเนินการทางขวามือและส่งคืนส่วนที่เหลือ `expr $ b% $ a` จะให้ 0
= (การมอบหมายงาน) กำหนดตัวถูกดำเนินการด้านขวาในตัวถูกดำเนินการด้านซ้าย a = $ b จะกำหนดค่าของ b ใน a
== (ความเท่าเทียมกัน) เปรียบเทียบตัวเลขสองตัวหากทั้งคู่เหมือนกันจะส่งกลับจริง [$ a == $ b] จะส่งคืนเท็จ
! = (ไม่เท่าเทียมกัน) เปรียบเทียบตัวเลขสองตัวหากทั้งสองต่างกันจะส่งกลับจริง [$ a! = $ b] จะคืนค่าจริง

เป็นสิ่งสำคัญมากที่จะต้องเข้าใจว่านิพจน์เงื่อนไขทั้งหมดควรอยู่ภายในวงเล็บปีกกาที่มีช่องว่างรอบ ๆ ตัวอย่างเช่น [ $a == $b ] ถูกต้องในขณะที่ [$a==$b] ไม่ถูกต้อง

การคำนวณทางคณิตศาสตร์ทั้งหมดทำได้โดยใช้จำนวนเต็มยาว

ตัวดำเนินการเชิงสัมพันธ์

Bourne Shell สนับสนุนตัวดำเนินการเชิงสัมพันธ์ต่อไปนี้ที่เฉพาะเจาะจงสำหรับค่าตัวเลข ตัวดำเนินการเหล่านี้ใช้ไม่ได้กับค่าสตริงเว้นแต่ค่าจะเป็นตัวเลข

ตัวอย่างเช่นตัวดำเนินการต่อไปนี้จะตรวจสอบความสัมพันธ์ระหว่าง 10 ถึง 20 และระหว่าง "10" และ "20" แต่ไม่อยู่ระหว่าง "สิบ" และ "ยี่สิบ"

สมมติตัวแปร a ถือ 10 และตัวแปร b ถือ 20 แล้ว -

แสดงตัวอย่าง

ตัวดำเนินการ คำอธิบาย ตัวอย่าง
-eq ตรวจสอบว่าค่าของตัวถูกดำเนินการสองตัวเท่ากันหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [$ a -eq $ b] ไม่เป็นความจริง
-ne ตรวจสอบว่าค่าของตัวถูกดำเนินการสองตัวเท่ากันหรือไม่ หากค่าไม่เท่ากันเงื่อนไขจะกลายเป็นจริง [$ a -ne $ b] เป็นจริง
-gt ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายมากกว่าค่าของตัวถูกดำเนินการด้านขวาหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [$ a -gt $ b] ไม่เป็นความจริง
-lt ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายน้อยกว่าค่าของตัวถูกดำเนินการด้านขวาหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [$ a -lt $ b] เป็นจริง
-ge ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายมากกว่าหรือเท่ากับค่าของตัวถูกดำเนินการด้านขวาหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [$ a -ge $ b] ไม่เป็นความจริง
-le ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายน้อยกว่าหรือเท่ากับค่าของตัวถูกดำเนินการด้านขวาหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [$ a -le $ b] เป็นจริง

เป็นสิ่งสำคัญมากที่จะต้องเข้าใจว่านิพจน์เงื่อนไขทั้งหมดควรอยู่ในเครื่องหมายวงเล็บเหลี่ยมโดยมีช่องว่างรอบ ๆ ตัวอย่างเช่น,[ $a <= $b ] ถูกต้องในขณะที่ [$a <= $b] ไม่ถูกต้อง

ตัวดำเนินการบูลีน

ตัวดำเนินการบูลีนต่อไปนี้ได้รับการสนับสนุนโดย Bourne Shell

สมมติตัวแปร a ถือ 10 และตัวแปร b ถือ 20 แล้ว -

แสดงตัวอย่าง

ตัวดำเนินการ คำอธิบาย ตัวอย่าง
! นี่คือการปฏิเสธเชิงตรรกะ สิ่งนี้จะเปลี่ยนเงื่อนไขจริงเป็นเท็จและในทางกลับกัน [! เท็จ] เป็นจริง
-o นี่เป็นตรรกะ OR. หากตัวถูกดำเนินการข้อใดข้อหนึ่งเป็นจริงเงื่อนไขจะกลายเป็นจริง [$ a -lt 20 -o $ b -gt 100] เป็นจริง
-a นี่เป็นตรรกะ AND. หากตัวถูกดำเนินการทั้งสองเป็นจริงเงื่อนไขนั้นจะกลายเป็นจริงหรือเป็นเท็จ [$ a -lt 20 -a $ b -gt 100] เป็นเท็จ

ตัวดำเนินการสตริง

ตัวดำเนินการสตริงต่อไปนี้ได้รับการสนับสนุนโดย Bourne Shell

สมมติตัวแปร a ถือ "abc" และตัวแปร b ถือ "efg" แล้ว -

แสดงตัวอย่าง

ตัวดำเนินการ คำอธิบาย ตัวอย่าง
= ตรวจสอบว่าค่าของตัวถูกดำเนินการสองตัวเท่ากันหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [$ a = $ b] ไม่เป็นความจริง
!= ตรวจสอบว่าค่าของตัวถูกดำเนินการสองตัวเท่ากันหรือไม่ หากค่าไม่เท่ากันเงื่อนไขจะกลายเป็นจริง [$ a! = $ b] เป็นจริง
-z ตรวจสอบว่าขนาดตัวถูกดำเนินการสตริงที่กำหนดเป็นศูนย์หรือไม่ ถ้าความยาวเป็นศูนย์มันจะส่งกลับจริง [-z $ a] ไม่เป็นความจริง
-n ตรวจสอบว่าขนาดตัวถูกดำเนินการสตริงที่กำหนดไม่ใช่ศูนย์หรือไม่ ถ้ามันเป็นความยาวที่ไม่ใช่ศูนย์มันจะส่งกลับจริง [-n $ a] ไม่ใช่เท็จ
str ตรวจสอบว่า strไม่ใช่สตริงว่าง ถ้าว่างเปล่าก็จะส่งกลับเท็จ [$ a] ไม่ใช่เท็จ

ตัวดำเนินการทดสอบไฟล์

เรามีตัวดำเนินการไม่กี่ตัวที่สามารถใช้เพื่อทดสอบคุณสมบัติต่างๆที่เกี่ยวข้องกับไฟล์ Unix

สมมติตัวแปร file เก็บชื่อไฟล์ที่มีอยู่ "test" ซึ่งมีขนาด 100 ไบต์และมี read, write และ execute อนุญาตเมื่อ -

แสดงตัวอย่าง

ตัวดำเนินการ คำอธิบาย ตัวอย่าง
-b file ตรวจสอบว่าไฟล์เป็นไฟล์พิเศษของบล็อกหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [-b $ file] เป็นเท็จ
-c file ตรวจสอบว่าไฟล์เป็นไฟล์พิเศษของอักขระหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [-c $ file] เป็นเท็จ
-d file ตรวจสอบว่าไฟล์เป็นไดเร็กทอรีหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [-d $ file] ไม่เป็นความจริง
-f file ตรวจสอบว่าไฟล์เป็นไฟล์ธรรมดาเมื่อเทียบกับไดเร็กทอรีหรือไฟล์พิเศษ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [-f $ file] เป็นจริง
-g file ตรวจสอบว่าไฟล์มีชุดบิต ID กลุ่ม (SGID) หรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [-g $ file] เป็นเท็จ
-k file ตรวจสอบว่าไฟล์มีการตั้งค่าบิตเหนียวหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [-k $ file] เป็นเท็จ
-p file ตรวจสอบว่าไฟล์เป็นไปป์ที่มีชื่อหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [-p $ file] เป็นเท็จ
-t file ตรวจสอบว่า File descriptor เปิดอยู่และเชื่อมโยงกับเทอร์มินัลหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [-t $ file] เป็นเท็จ
-u file ตรวจสอบว่าไฟล์มีชุดบิต Set User ID (SUID) หรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [-u $ file] เป็นเท็จ
-r file ตรวจสอบว่าไฟล์สามารถอ่านได้หรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [-r $ file] เป็นจริง
-w file ตรวจสอบว่าไฟล์สามารถเขียนได้หรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [-w $ file] เป็นจริง
-x file ตรวจสอบว่าไฟล์สามารถเรียกใช้งานได้หรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [-x $ file] เป็นจริง
-s file ตรวจสอบว่าไฟล์มีขนาดมากกว่า 0 หรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง [-s $ file] เป็นจริง
-e file ตรวจสอบว่ามีไฟล์อยู่หรือไม่ เป็นจริงแม้ว่าไฟล์จะเป็นไดเร็กทอรี แต่มีอยู่ [-e $ file] เป็นจริง

C ตัวดำเนินการเชลล์

ลิงค์ต่อไปนี้จะให้ข้อมูลคร่าวๆเกี่ยวกับ C Shell Operators -

C ตัวดำเนินการเชลล์

กรณ์เชลล์โอเปอเรเตอร์

ลิงก์ต่อไปนี้จะช่วยให้คุณเข้าใจ Korn Shell Operators -

กรณ์เชลล์โอเปอเรเตอร์