Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

10 ตัวดำเนินการลูกโซ่ที่มีประโยชน์ใน Linux พร้อมตัวอย่างที่ใช้งานได้จริง

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

10 ตัวดำเนินการลูกโซ่ที่มีประโยชน์ใน Linux พร้อมตัวอย่างที่ใช้งานได้จริง

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

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

1. เครื่องหมายและตัวดำเนินการ (&)

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

เรียกใช้คำสั่งหนึ่งคำสั่งในเบื้องหลัง:

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

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

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

2. ตัวดำเนินการเซมิโคลอน (;)

ตัวดำเนินการเซมิโคลอนทำให้สามารถรัน คำสั่งหลายคำสั่งในครั้งเดียว และการดำเนินการคำสั่งจะเกิดขึ้นตามลำดับ

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

ชุดคำสั่งข้างต้นจะดำเนินการ อัปเดต . ก่อน คำแนะนำ แล้ว อัปเกรด คำสั่งและสุดท้ายจะสร้าง 'การทดสอบ ' ไดเร็กทอรีภายใต้ไดเร็กทอรีการทำงานปัจจุบัน

3. AND โอเปอเรเตอร์ (&&)

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

ตัวอย่างเช่น ฉันต้องการเยี่ยมชมเว็บไซต์ tecmint.com ใช้คำสั่ง links ในเทอร์มินัล แต่ก่อนหน้านั้นฉันต้องตรวจสอบว่าโฮสต์ ใช้งานจริง หรือ ไม่ .

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

4. หรือโอเปอเรเตอร์ (||)

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

ตัวอย่างเช่น ฉันต้องการเรียกใช้ 'apt-get update ' จากบัญชีที่ไม่ใช่รูท และหากคำสั่งแรกล้มเหลว คำสั่งที่สอง 'ลิงก์ www.tecmint.com ' คำสั่งจะดำเนินการ

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

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

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

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

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

5. ไม่ใช่ตัวดำเนินการ (!)

ไม่ใช่ตัวดำเนินการ (! ) เหมือนกับ 'ยกเว้น ' คำแถลง. คำสั่งนี้จะดำเนินการทั้งหมดยกเว้นเงื่อนไขที่ให้ไว้ เพื่อให้เข้าใจสิ่งนี้ ให้สร้างไดเร็กทอรี 'tecmint ' ในโฮมไดเร็กตอรี่ของคุณและ '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 (&&– ||)

โอเปอเรเตอร์ข้างต้นเป็นการรวมกันของ 'AND ' และ 'หรือ 'โอเปอเรเตอร์. มันเหมือนกับ ‘if-else ' คำสั่ง

ตัวอย่างเช่น ลองทำ ping ไปที่ tecmint.com หากสำเร็จ echo ‘ยืนยันแล้ว ' else echo 'โฮสต์ลง ‘.

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. ตัวดำเนินการท่อ (|)

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

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

8. ตัวดำเนินการรวมคำสั่ง {}

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

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

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

9. ตัวดำเนินการลำดับความสำคัญ ()

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

Command_x1 &&Command_x2 || Command_x3 && Command_x4.

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

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

ในคำสั่งหลอกด้านบน ถ้า Command_x1 ล้มเหลว Command_x2 ยังล้มเหลว แต่ยังคง Command_x3 และ Command_x4 การดำเนินการขึ้นอยู่กับสถานะการออกของ Command_x3 .

10. ตัวดำเนินการต่อ (\)

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

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

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