Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Thành thạo chuỗi lệnh Linux: 10 toán tử thiết yếu với ví dụ thực tế

Chuỗi lệnh (command chaining) Linux nghĩa là kết hợp nhiều lệnh và thực thi dựa trên hành vi của toán tử đặt giữa chúng. Chuỗi lệnh trong Linux giống như viết script shell ngắn tại chính shell và thực thi trực tiếp từ terminal. Chuỗi lệnh giúp tự động hóa quy trình. Hơn nữa, máy không giám sát có thể hoạt động hệ thống hơn với toán tử chuỗi lệnh.

Đọc thêm: Cách dùng Awk và Regular Expressions để lọc văn bản trong file

Bài viết này tập trung vào các toán tử chuỗi lệnh thường dùng, với mô tả ngắn và ví dụ tương ứng chắc chắn tăng năng suất và giúp viết code ngắn gọn, có nghĩa, giảm tải hệ thống khi cần.

1. Toán tử Ampersand (&)

Chức năng của '&' là chạy lệnh nền. Chỉ cần gõ lệnh theo sau khoảng trắng và '&'. Có thể chạy nhiều lệnh nền cùng lúc.

Chạy một lệnh nền:

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

Chạy hai lệnh nền cùng lúc:

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

2. Toán tử chấm phẩy (;)

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

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

Kết hợp lệnh trên sẽ thực thi update trước, rồi upgrade và cuối cùng tạo thư mục 'test' dưới thư mục làm việc hiện tại.

3. Toán tử AND (&&)

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

Ví dụ, muốn truy cập website tecmint.com bằng links trong terminal nhưng trước đó cần kiểm tra host sống hay chết.

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

4. Toán tử OR (||)

Toán tử OR (||) giống câu 'else' trong lập trình. Cho phép thực thi lệnh thứ hai chỉ khi lệnh đầu THẤT BẠI, tức mã thoát là '1'.

Ví dụ, chạy 'apt-get update' từ tài khoản non-root và nếu thất bại thì chạy 'links www.tecmint.com'.

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

Trong lệnh trên, vì user không được update hệ thống, mã thoát lệnh đầu là '1' nên lệnh cuối 'links tecmint.com' chạy.

Nếu lệnh đầu thành công với mã thoát '0'? Chắc chắn lệnh thứ hai không chạy.

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

Ở đây, user tạo thư mục 'test' trong home, được phép. Lệnh thành công mã thoát '0' nên phần cuối không chạy.

5. Toán tử NOT (!)

Toán tử NOT (!) giống câu 'except'. Thực thi tất cả trừ điều kiện cho trước. Để hiểu, tạo thư mục 'tecmint' ở home và 'cd' vào đó.

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

Tạo vài loại file trong thư mục 'tecmint'.

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

Xem các file vừa tạo:

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

Xóa tất cả file trừ 'html' một lần, cách thông minh.

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

Kiểm tra lại bằng ls.

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

6. Toán tử AND – OR (&& – ||)

Toán tử này kết hợp 'AND' và 'OR'. Giống câu 'if-else'.

Ví dụ, ping tecmint.com, nếu thành công echo 'Verified' else echo 'Host Down'.

admin@wsxdn.com:~/tecmint$ ping -c3 www.tecmint.com && echo "Verified" || echo "Host Down"
Kết quả 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

Ngắt internet và chạy lại lệnh.

admin@wsxdn.com:~/tecmint$ ping -c3 www.tecmint.com && echo "verified" || echo "Host Down"
Kết quả mẫu
ping: unknown host www.tecmint.com
Host Down

7. Toán tử PIPE (|)

PIPE rất hữu ích khi đầu ra lệnh đầu làm đầu vào lệnh sau. Ví dụ, pipe đầu ra 'ls -l' sang 'less' xem kết quả.

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

8. Toán tử kết hợp lệnh {}

Kết hợp 2 lệnh trở lên, lệnh thứ 2 phụ thuộc thực thi lệnh đầu.

Ví dụ, kiểm tra thư mục 'bin' có tồn tại không, xuất kết quả tương ứng.

admin@wsxdn.com:~$ [ -d bin ] || { echo "Thư mục không tồn tại, tạo ngay."; mkdir bin; } && echo "Thư mục tồn tại."

9. Toán tử ưu tiên ()

Toán tử 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ả định, nếu Command_x1 thất bại? Cả Command_x2, Command_x3, Command_x4 đều không chạy. Dùng Toán tử ưu tiên:

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

Trong lệnh giả định, nếu Command_x1 thất bại, Command_x2 cũng thất bại nhưng vẫn Command_x3 và Command_x4 chạy tùy mã thoát Command_x3.

10. Toán tử nối (\)

Toán tử nối (\) như tên gọi, dùng nối lệnh dài trên nhiều dòng trong shell. Ví dụ, lệnh dưới mở file test(1).txt.

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

Đó là tất cả cho lần này. Sớm sẽ có bài thú vị khác. Cho đến lúc đó hãy theo dõi, khỏe và kết nối với Tecmint. Đừng quên góp ý quý báu trong phần bình luận.