10 ví dụ về toán tử chuỗi trên Centos / Ubuntu / Debian / Fedora

Bài viết này nhằm giới thiệu về các toán tử chuỗi kết hợp lệnh thường được sử dụng, kèm theo mô tả ngắn và ví dụ tương ứng nhằm tăng năng suất làm việc và giúp bạn viết mã ngắn gọn, có ý nghĩa hơn, đồng thời giảm tải hệ thống trong một số trường hợp.

Toán tử Ampersand (&)

Toán tử chuỗi đầu tiên - Ampersand (&) có chức năng là chạy lệnh trong nền. Chỉ cần gõ lệnh, sau đó là một dấu cách và '&'. Bạn có thể thực hiện nhiều lệnh trong nền cùng một lúc.
Chạy một lệnh trong nền:

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

Chạy hai lệnh trong nền, đồng thời:

root@localhost:/home/tecmint# apt-get update & apt-get upgrade &

Toán tử dấu chấm phẩy (;)

Toán tử dấu chấm phẩy cho phép chạy nhiều lệnh cùng một lúc và thực hiện chúng tuần tự.

root@localhost:/home/tecmint# apt-get update ; apt-get upgrade ; mkdir test

Kết hợp lệnh trên sẽ thực hiện lệnh cập nhật trước, sau đó là lệnh nâng cấp và cuối cùng sẽ tạo một thư mục 'test' trong thư mục làm việc hiện tại.

Toán tử AND (&&)

Toán tử chuỗi AND (&&) chỉ thực hiện lệnh thứ hai nếu lệnh đầu tiên THÀNH CÔNG, tức là mã thoát của lệnh đầu tiên là Lệnh này rất hữu ích để kiểm tra trạng thái thực thi của lệnh trước đó.

Ví dụ, bạn muốn truy cập trang web tecmint.com bằng lệnh links trong terminal nhưng trước đó bạn cần kiểm tra xem máy chủ có hoạt động hay không.

root@localhost:/home/tecmint# ping -c3 www.tecmint.com && links www.tecmint.com

Toán tử OR (||)

Toán tử chuỗi OR (||) tương tự như câu lệnh 'else' trong lập trình. Toán tử trên cho phép bạn thực hiện lệnh thứ hai chỉ khi lệnh đầu tiên THẤT BẠI, tức là mã thoát của lệnh đầu tiên là '1'.

Ví dụ, bạn muốn thực thi 'apt-get update' từ tài khoản không phải root và nếu lệnh đầu tiên thất bại, thì lệnh thứ hai 'links www.tecmint.com' sẽ được thực thi.

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

Trong lệnh trên, vì người dùng không được phép cập nhật hệ thống, điều đó có nghĩa là mã thoát của lệnh đầu tiên là '1' và do đó lệnh cuối cùng 'links tecmint.com' được thực thi. Nếu lệnh đầu tiên được thực thi thành công với mã thoát '0', thì rõ ràng lệnh thứ hai sẽ không được thực thi.

tecmint@localhost:~$ mkdir test || links tecmint.com

Ở đây, người dùng tạo một thư mục 'test' trong thư mục người dùng của mình, điều này người dùng được phép thực hiện. Lệnh được thực thi thành công với mã thoát '0' và do đó phần cuối của lệnh không được thực thi.

Toán tử NOT (!)

Toán tử NOT (!) tương tự như câu lệnh 'except' trong lập trình. Lệnh này sẽ thực thi tất cả các điều kiện trừ điều kiện được cung cấp. Để hiểu điều này, hãy tạo một thư mục 'tecmint' trong thư mục người dùng của bạn và 'cd' vào nó.

tecmint@localhost:~$ mkdir tecmint 
tecmint@localhost:~$ cd tecmint

Tiếp theo, tạo ra một số loại tệp trong thư mục 'tecmint'.

tecmint@localhost:~/tecmint$ touch a.doc b.doc a.pdf b.pdf a.xml b.xml a.html b.html

Xem, chúng ta đã tạo ra tất cả các tệp mới trong thư mục 'tecmint'.

tecmint@localhost:~/tecmint$ ls 
a.doc a.html a.pdf a.xml b.doc b.html b.pdf b.xml

Bây giờ hãy xóa tất cả các tệp trừ tệp 'html' cùng một lúc, một cách thông minh.

tecmint@localhost:~/tecmint$ rm -r !(*.html)

Chỉ để xác minh, thực thi lần cuối. Liệt kê tất cả các tệp có sẵn bằng câu lệnh ls.

tecmint@localhost:~/tecmint$ ls 
a.html b.html

Toán tử AND - OR (&& - ||)

Toán tử trên thực tế là sự kết hợp của toán tử 'AND' và 'OR'. Nó tương tự như câu lệnh 'if-else'.
Ví dụ, hãy thực hiện ping đến tecmint.com, nếu thành công, in ra 'Verified', ngược lại in ra 'Host Down'.

tecmint@localhost:~/tecmint$ ping -c3 www.tecmint.com && echo "Verified" || echo "Host Down"

Đầu ra mẫu:

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

Bây giờ, ngắt kết nối internet của bạn và thử lại cùng một lệnh.

tecmint@localhost:~/tecmint$ ping -c3 www.tecmint.com && echo "verified" || echo "Host Down"

Đầu ra mẫu:

ping: unknown host www.tecmint.com 
Host Down

Toán tử PIPE (|)

Toán tử chuỗi PIPE rất hữu ích khi đầu ra của lệnh đầu tiên được sử dụng làm đầu vào cho lệnh thứ hai. Ví dụ, chuyển đầu ra của 'ls -l' sang 'less' và xem kết quả của lệnh.

tecmint@localhost:~$ ls -l | less

Toán tử Kết hợp lệnh {}

Kết hợp hai hoặc nhiều lệnh, lệnh thứ hai phụ thuộc vào việc thực thi của lệnh đầu tiên. Ví dụ, kiểm tra xem một thư mục 'bin' có tồn tại hay không và đưa ra kết quả tương ứng.

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

Toán tử Ưu tiên ()

Toán tử "Ưu tiên ()"cho phép thực thi lệnh theo thứ tự ưu tiên.

Command_x1 &&Command_x2 || Command_x3 && Command_x4.

Trong lệnh giả trên, nếu Command_x1 thất bại, cả Command_x2, Command_x3 và Command_x4 đều không được thực thi. Để làm điều này, chúng ta sử dụng Toán tử Ưu tiên như sau:

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

Trong lệnh giả trên, nếu Command_x1 thất bại, Command_x2 cũng sẽ thất bại nhưng Command_x3 và Command_x4 vẫn được thực thi dựa trên mã thoát của Command_x3.

Toán tử Nối (\)

Toán tử Nối () được sử dụng để nối các lệnh lớn qua nhiều dòng trong shell. Ví dụ, lệnh dưới đây sẽ mở tệp văn bản test(1).txt.

tecmint@localhost:~/Downloads$ nano test\(1\).txt