Câu 1cmd2 chạy khi nào trong cmd1 && cmd2?
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ệu | Chạy lệnh sau khi | Ví 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 |
; 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
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ỗ.
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
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 và $(...) 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ộng | echo '$name' → $name |
"..." (kép) | Mở rộng thành giá trị | Mở rộng thành đầu ra lệnh | echo "$name" → Linux |
$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
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.
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à && và || 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ĩa | Kiểm tra |
|---|---|---|
0 | Lệnh trước đã thành công | echo $? hiển thị 0 |
| khác 0 | Lệnh trước đã thất bại | echo $? hiển thị 1, v.v. |
echo $? là 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)
Kiểm tra kiến thức
Hãy trả lời từng câu hỏi một.
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 ||?