Học bằng cách đọc theo thứ tự

Nối lệnh — ; && || và dấu nháy

Học cách chạy tuần tự bằng ;, chạy có điều kiện bằng && (khi thành công) và || (khi thất bại), và sự khác nhau giữa nháy đơn và nháy kép trong việc mở rộng biến — thực hành ngay trên terminal trong trình duyệt.

Nối lệnh — ; && ||

Bạn có thể nối nhiều lệnh trên một dòng.

; chạy chúng theo thứ tự bất kể kết quả của lệnh trước.

&& chỉ chạy lệnh tiếp theo khi lệnh trước thành công, còn || chỉ chạy lệnh tiếp theo khi lệnh trước thất bại.

Ký hiệuChạy lệnh sau khiVí dụ
;Luôn luôn, bất kể kết quảecho a ; echo b
&&Chỉ khi lệnh trước thành công (exit status 0)mkdir d && cd d
||Chỉ khi lệnh trước thất bại (khác 0)cat f || echo ng
; && || khác nhau thế nào
echo A ; echo Bchạy cả A và Bbất kể kết quảcmd && echo okok chỉ khi cmdthành côngcmd || echo ngng chỉ khi cmdthất bại
; luôn chạy tuần tự, && chạy lệnh sau khi thành công, còn || chạy lệnh sau khi thất bại.
echo step1 ; echo step2          # chạy cả hai theo thứ tự
mkdir build && echo created      # created nếu thành công
ls missing.txt || echo not-found # not-found nếu thất bại

① Chạy echo first; echo second và xác nhận ; in hai kết quả theo thứ tự.

② Chạy echo ok && echo done và xác nhận && tiếp tục sang lệnh sau khi lệnh trước thành công.

③ Chạy cat nofile.txt || echo missing và xác nhận || chỉ chạy vế phải khi lệnh trước thất bại. (Chạy đúng thì phần giải thích sẽ hiện ra.)

Linux console
0 / 3 đã hoàn thành
Loading Linux Terminal...

Kết hợp && và || — Rẽ nhánh trên một dòng

Bạn có thể viết && rồi || nối tiếp nhau trên một dòng.

cmd && echo ok || echo ng chạy echo ok nếu cmd thành công, và echo ng nếu nó thất bại.

Đây là dạng quen dùng khi bạn muốn viết cả hành động thành công lẫn thất bại ở cùng một chỗ.

Rẽ nhánh bằng cách kết hợp && và ||
cmdrẽ nhánh theoexit status&& echo okok nếu cmdthành công|| echo ngng nếu lệnh trướcthất bại
cmd && echo ok || echo ng in ok nếu cmd thành công, hoặc ng nếu nó thất bại.
mkdir out && echo created || echo failed   # created khi thành công
ls nofile.txt && echo found || echo none   # none khi thất bại

① Chạy ls . && echo found || echo none và xác nhận found xuất hiện vì ls . thành công.

② Chạy cat nofile.txt && echo found || echo none và xác nhận none xuất hiện vì cat thất bại.

③ So sánh hai kết quả và thấy phần sau && và phần sau || chuyển đổi thế nào dựa trên thành công hay thất bại.

Linux console
0 / 2 đã hoàn thành
Loading Linux Terminal...

Dấu nháy khác nhau thế nào — ' và "

Có hai loại dấu nháy để bao quanh một chuỗi.

Nháy đơn '...' coi nội dung là ký tự nguyên văn và không thay thế $VAR.

Nháy kép "..." mở rộng $VAR$(...) bên trong thành giá trị của chúng.

Chúng cũng được dùng để truyền một chuỗi chứa khoảng trắng như một đơn vị duy nhất.

Dấu nháy$VAR$(...)Ví dụ → đầu ra
'...' (đơn)Không mở rộng (nguyên văn)Không mở rộngecho '$name'$name
"..." (kép)Mở rộng thành giá trịMở rộng thành đầu ra lệnhecho "$name"Linux
Mở rộng: nháy đơn vs nháy kép
name=Linuxđặt name là Linuxecho '$name'in $namenguyên vănecho "$name"mở rộng thành Linux
Nháy đơn giữ nguyên văn; nháy kép mở rộng $variable thành giá trị của nó.
place=server
echo 'path is $place'   # nguyên văn: path is $place
echo "path is $place"   # mở rộng: path is server

① Đặt một biến bằng name=Linux.

② Chạy echo '$name' và xác nhận nháy đơn in $name nguyên văn.

③ Chạy echo "$name" và xác nhận nháy kép mở rộng nó thành giá trị Linux.

Linux console
0 / 3 đã hoàn thành
Loading Linux Terminal...

Nhúng biến và đầu ra lệnh trong nháy kép

Bên trong nháy kép, bạn có thể dựng một chuỗi duy nhất từ biến và thay thế lệnh cùng lúc.

$(...) được thay bằng đầu ra của lệnh.

Ví dụ, $(pwd) được thay bằng đường dẫn vị trí hiện tại của bạn trước khi hiển thị.

Bao trong nháy kép cũng là cách cơ bản để truyền một giá trị chứa khoảng trắng như một đối số duy nhất.

① Đặt một biến bằng user=guest.

② Chạy echo "hello $user" && echo done và xác nhận biến được mở rộng bên trong nháy kép và done theo sau khi thành công.

③ Chạy echo "now: $(pwd)" và xác nhận $(...) bên trong nháy kép được thay bằng đường dẫn hiện tại.

Linux console
0 / 3 đã hoàn thành
Loading Linux Terminal...

Thành công và thất bại thực chất là gì — Exit status và echo $?

'Thành công hay thất bại' mà &&|| theo dõi được xác định bởi một con số gọi là exit status mà lệnh để lại khi nó kết thúc.

0 nghĩa là thành công và bất cứ giá trị nào khác 0 nghĩa là thất bại.

Exit status của lệnh trước được đặt vào biến đặc biệt $?, mà bạn có thể kiểm tra bằng echo $?.

Exit statusÝ nghĩaKiểm tra
0Lệnh trước đã thành côngecho $? hiển thị 0
khác 0Lệnh trước đã thất bạiecho $? hiển thị 1, v.v.
Đọc exit status bằng echo $?
ls . rồi echo $?0 (thành công)cat nofile rồi echo $?khác 0 (thất bại)
Ngay sau một lệnh thành công, echo $?0; ngay sau một lệnh thất bại, nó khác 0.
ls .            # một lệnh thành công
echo $?         # exit status trước đó -> 0
cat nofile.txt  # một lệnh thất bại
echo $?         # exit status trước đó -> khác 0 (vd 1)

① Chạy ls . rồi echo $?, và xác nhận nó hiển thị 0 vì đã thành công.

② Chạy cat nofile.txt rồi echo $?, và xác nhận nó hiển thị khác 0 (như 1) vì đã thất bại.

③ Lưu ý rằng con số từ echo $? chính là thứ mà &&|| dựa vào để quyết định.

Linux console
0 / 3 đã hoàn thành
Loading Linux Terminal...
QUIZ

Kiểm tra kiến thức

Hãy trả lời từng câu hỏi một.

Câu 1cmd2 chạy khi nào trong cmd1 && cmd2?

Câu 2echo '$name' in ra gì? (giả sử đã đặt name=Linux)

Câu 3Điều nào đúng về vai trò của ||?