Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

เชี่ยวชาญการเชื่อมคำสั่ง Linux: 10 ตัวดำเนินการจำเป็นพร้อมตัวอย่างปฏิบัติ

การเชื่อมคำสั่ง Linux (Command Chaining) หมายถึง การรวมคำสั่งหลายคำสั่งเข้าด้วยกัน และให้พวกมันรันตามพฤติกรรมของตัวดำเนินการที่ใช้ระหว่างกัน การเชื่อมคำสั่งใน Linux คล้ายกับการเขียน shell scripts สั้นๆ ที่เชลล์เอง และรันจากเทอร์มินัลโดยตรง การเชื่อมทำให้เป็นไปได้ที่จะทำให้กระบวนการเป็นอัตโนมัติ นอกจากนี้ เครื่องที่ไม่มีผู้ดูแลสามารถทำงานได้อย่างเป็นระบบมากขึ้นด้วยความช่วยเหลือของตัวดำเนินการเชื่อม

อ่านเพิ่มเติม: วิธีใช้ Awk และ Regular Expressions กรองข้อความในไฟล์

บทความนี้เน้นที่ตัวดำเนินการ command-chaining operators ที่ใช้บ่อย พร้อมคำอธิบายสั้นและตัวอย่างที่เกี่ยวข้อง ซึ่งแน่นอนจะเพิ่มประสิทธิภาพการทำงานของคุณ และให้คุณเขียนโค้ดสั้นๆ ที่มีความหมาย พร้อมลดโหลดระบบบางครั้ง

1. Ampersand Operator (&)

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

รันคำสั่งหนึ่งในพื้นหลัง:

admin@wsxdn.com:~$ ping -c5 www.tecmint.com &

รันสองคำสั่งในพื้นหลัง พร้อมกัน:

admin@wsxdn.com:/home/tecmint# apt-get update & apt-get upgrade &

2. Semi-colon Operator (;)

ตัวดำเนินการ semi-colon ทำให้สามารถรันคำสั่งหลายคำสั่งในครั้งเดียวได้ และการรันคำสั่งเกิดขึ้นตามลำดับ

admin@wsxdn.com:/home/tecmint# apt-get update ; apt-get upgrade ; mkdir test

การรวมคำสั่งข้างต้นจะรันคำสั่ง update ก่อน ตามด้วย upgrade และสุดท้ายจะสร้างไดเรกทอรี 'test' ภายใต้ไดเรกทอรีทำงานปัจจุบัน

3. AND Operator (&&)

AND Operator (&&) จะรันคำสั่งที่สอง ก็ต่อเมื่อ การรันคำสั่งแรก สำเร็จ (SUCCEEDS) คือ สถานะการออก (exit status) ของคำสั่งแรกเป็น 0 คำสั่งนี้มีประโยชน์มากในการตรวจสอบสถานะการรันของคำสั่งล่าสุด

ตัวอย่าง: ผมอยากเข้าเว็บ tecmint.com ด้วยคำสั่ง links ในเทอร์มินัล แต่ก่อนหน้านั้นต้องตรวจสอบว่าโฮสต์ live หรือ ไม่

admin@wsxdn.com:/home/tecmint# ping -c3 www.tecmint.com && links www.tecmint.com

4. OR Operator (||)

OR Operator (||) คล้ายกับคำสั่ง 'else' ในการเขียนโปรแกรม ตัวดำเนินการนี้อนุญาตให้รันคำสั่งที่สองก็ต่อเมื่อคำสั่งแรกล้มเหลว คือ สถานะการออกของคำสั่งแรกเป็น '1'

ตัวอย่าง: ผมอยากรัน 'apt-get update' จากบัญชี non-root และถ้าคำสั่งแรกล้มเหลว คำสั่งที่สอง 'links www.tecmint.com' จะรัน

admin@wsxdn.com:~$ apt-get update || links tecmint.com

ในคำสั่งข้างต้น เนื่องจาก ผู้ใช้ ไม่ได้รับอนุญาตให้ update ระบบ หมายความว่าสถานะการออกของคำสั่งแรกคือ '1' และดังนั้นคำสั่งสุดท้าย 'links tecmint.com' จึงถูกรัน

ถ้าคำสั่งแรกรันสำเร็จ ด้วยสถานะการออก '0'? แน่นอน! คำสั่งที่สองจะไม่รัน

admin@wsxdn.com:~$ mkdir test || links tecmint.com

ที่นี่ ผู้ใช้สร้างโฟลเดอร์ 'test' ในไดเรกทอรี home ซึ่งผู้ใช้ได้รับอนุญาต คำสั่งรันสำเร็จให้สถานะการออก '0' และดังนั้นส่วนสุดท้ายของคำสั่งไม่ได้ถูกรัน

5. NOT Operator (!)

NOT Operator (!) คล้ายกับคำสั่ง 'except' คำสั่งนี้จะรันทุกอย่าง ยกเว้นเงื่อนไขที่ให้มา เพื่อความเข้าใจ ให้สร้างไดเรกทอรี 'tecmint' ใน home directory และ 'cd' เข้าไป

admin@wsxdn.com:~$ mkdir tecmint
admin@wsxdn.com:~$ cd tecmint

ต่อไป สร้างไฟล์หลายประเภทในโฟลเดอร์ 'tecmint'

admin@wsxdn.com:~/tecmint$ touch a.doc b.doc a.pdf b.pdf a.xml b.xml a.html b.html

ดูว่าเราสร้างไฟล์ใหม่ทั้งหมดภายในโฟลเดอร์ 'tecmint'

admin@wsxdn.com:~/tecmint$ ls
a.doc a.html a.pdf a.xml b.doc b.html b.pdf b.xml

ตอนนี้ ลบไฟล์ทั้งหมด ยกเว้น ไฟล์ 'html' ทั้งหมดพร้อมกัน แบบฉลาด

admin@wsxdn.com:~/tecmint$ rm -r !(*.html)

เพื่อยืนยันการรันครั้งล่าสุด ให้ลิสต์ไฟล์ที่มีอยู่ด้วยคำสั่ง ls

admin@wsxdn.com:~/tecmint$ ls
a.html b.html

6. AND – OR operator (&& – ||)

ตัวดำเนินการข้างต้นจริงๆ แล้วเป็นการรวมของ 'AND' และ 'OR' Operator มันคล้ายกับคำสั่ง 'if-else'

ตัวอย่าง: ลอง ping ไป tecmint.com ถ้าสำเร็จ echo 'Verified' ไม่สำเร็จ echo 'Host Down'

admin@wsxdn.com:~/tecmint$ ping -c3 www.tecmint.com && echo "Verified" || echo "Host Down"
ตัวอย่างผลลัพธ์
PING www.tecmint.com (212.71.234.61) 56(84) bytes of data.
64 bytes from www.tecmint.com (212.71.234.61): icmp_req=1 ttl=55 time=216 ms
64 bytes from www.tecmint.com (212.71.234.61): icmp_req=2 ttl=55 time=224 ms
64 bytes from www.tecmint.com (212.71.234.61): icmp_req=3 ttl=55 time=226 ms
--- www.tecmint.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 216.960/222.789/226.423/4.199 ms
Verified

ตอนนี้ ลองตัดอินเทอร์เน็ต และลองคำสั่งเดียวกันอีกครั้ง

admin@wsxdn.com:~/tecmint$ ping -c3 www.tecmint.com && echo "verified" || echo "Host Down"
ตัวอย่างผลลัพธ์
ping: unknown host www.tecmint.com
Host Down

7. PIPE Operator (|)

PIPE operator นี้มีประโยชน์มากที่เอาต์พุตของคำสั่งแรกทำหน้าที่เป็นอินพุตของคำสั่งที่สอง ตัวอย่าง: pipeline เอาต์พุตของ 'ls -l' ไป 'less' และดูผลลัพธ์

admin@wsxdn.com:~$ ls -l | less

8. Command Combination Operator {}

รวมคำสั่งสองคำสั่งขึ้นไป คำสั่งที่สองขึ้นอยู่กับการรันของคำสั่งแรก

ตัวอย่าง: ตรวจสอบว่าไดเรกทอรี 'bin' มีอยู่หรือไม่ และแสดงผลลัพธ์ที่สอดคล้อง

admin@wsxdn.com:~$ [ -d bin ] || { echo Directory does not exist, creating directory now.; mkdir bin; } && echo Directory exists. 

9. Precedence Operator ()

ตัวดำเนินการนี้ทำให้สามารถรันคำสั่งตามลำดับความสำคัญได้

Command_x1 &&Command_x2 || Command_x3 && Command_x4.

ใน pseudo command ข้างต้น ถ้า Command_x1 ล้มเหลว? ไม่ว่าจะเป็น Command_x2, Command_x3, Command_x4 จะไม่ถูกรัน สำหรับนี้เราใช้ Precedence Operator ดังนี้:

(Command_x1 &&Command_x2) || (Command_x3 && Command_x4)

ใน pseudo command ข้างต้น ถ้า Command_x1 ล้มเหลว Command_x2 ก็ล้มเหลวเช่นกัน แต่ยังคง Command_x3 และ Command_x4 รันขึ้นอยู่กับสถานะการออกของ Command_x3

10. Concatenation Operator (\)

Concatenation Operator (\) ตามที่ชื่อบ่งชี้ ใช้เพื่อต่อคำสั่งยาวๆ หลายบรรทัดในเชลล์ ตัวอย่าง: คำสั่งด้านล่างจะเปิดไฟล์ข้อความ test(1).txt

admin@wsxdn.com:~/Downloads$ nano test\(1\).txt

ขอจบเพียงเท่านี้ ผมจะมากับบทความน่าสนใจอีกเรื่องเร็วๆ นี้ จนกว่าจะพบกันใหม่ ขอให้ติดตาม อยู่กับสุขภาพดี และเชื่อมต่อกับ Tecmint อย่าลืมให้ความคิดเห็นที่มีค่าในส่วนความคิดเห็นของเรา