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

Shell Script - Biến và thay thế lệnh

Gán bằng name=value và tham chiếu bằng "$name", xem nháy đơn và nháy kép mở rộng khác nhau ra sao, chạy thay thế lệnh $(date), tính toán số học $(( n * 2 )), và đọc đầu vào bằng read — minh họa và thực hành trên terminal trong trình duyệt.

Dùng biến — gán và tham chiếu

Trong một shell script, bạn đặt tên cho một giá trị và dùng lại nó bao nhiêu lần tùy thích.

Bạn gán bằng dạng name=value, và không được đặt khoảng trắng quanh dấu =.

Nếu đặt, nó bị hiểu thành một lệnh riêng và báo lỗi.

Bạn lấy lại giá trị đã gán bằng $name hoặc ${name}.

Nếu có ký tự đi liền ngay sau $name, nó được xem là một phần của tên biến, nên hãy dùng ${name} để đánh dấu ranh giới.

Từ gán đến tham chiếu
name=alicename nhận giá trịecho "$name"$name thay bằng giá trịin ra alicegántham chiếu
Đặt một giá trị vào bằng name=alice, rồi lấy ra bằng $name để dùng.

Dấu nháy — nháy đơn và nháy kép khác nhau khi mở rộng

Có hai loại dấu nháy để bao một chuỗi, và chúng mở rộng khác nhau.

Bên trong nháy đơn '...', $name được xử lý theo nghĩa đen và không được mở rộng.

Bên trong nháy kép "...", $name được thay bằng giá trị của nó.

Dùng nháy kép khi bạn muốn chèn một giá trị vào giữa văn bản, như "Hello $name", và dùng nháy đơn khi bạn muốn in $ nguyên dạng.

Mở rộng với nháy đơn và nháy kép
echo '$name'in $name (không mở rộng)echo "$name"in alice (đã mở rộng)
Nháy đơn in $name nguyên dạng; nháy kép thay nó bằng giá trị.
name=alice                       # không có khoảng trắng quanh =
echo "hello $name"               # hello alice (nháy kép mở rộng)
echo 'hello $name'               # hello $name (nháy đơn thì không)
echo "path is ${name}/data"      # dùng {} để đánh dấu ranh giới tên

Tạo một script đặt tên người dùng vào một biến và cho thấy cách hiển thị thay đổi tùy theo dấu nháy.

① Mở quotes.sh bằng vi quotes.sh, nhấn i để vào insert mode, và viết #!/bin/sh ở dòng đầu.

② Trong script, gán một tên vào một biến, rồi in một dòng dùng nháy kép ("câu chào + biến") và một dòng dùng nháy đơn theo cùng cách (bạn có thể sao chép nội dung cần viết từ bảng đáp án và dán vào).

③ Nhấn Esc, lưu và thoát bằng :wq, rồi cấp quyền thực thi cho tệp.

④ Chạy script và xác nhận dòng nháy kép và dòng nháy đơn hiển thị khác nhau. (Nếu chạy đúng, phần giải thích sẽ hiện ra.)

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

Thay thế lệnh — $()

$(command) là cách dùng đầu ra của một lệnh làm giá trị ngay tại nơi bạn viết.

Viết kiểu như today=$(date +%Y-%m-%d) thì ngày mà date tạo ra đi thẳng vào today.

Bạn dùng nó để thu kết quả của một lệnh vào một biến hoặc chèn nó vào giữa văn bản.

Luồng của thay thế lệnh
$(date)2026-06-18today=$(date)thay bằng đầu ratoday=2026-06-18chạy datethay thế lệnhgán
$(date) được thay bằng đầu ra của việc chạy date, và today=$(date) đặt giá trị đó vào biến.
today=$(date +%Y-%m-%d)          # thu đầu ra của date vào một biến
echo "today is $today"           # chèn giá trị đã thu vào văn bản
user=$(whoami)                   # đầu ra của lệnh khác cũng làm giá trị được
echo "user: $user"

Tạo một script thu đầu ra của một lệnh vào một biến bằng thay thế lệnh $() và chèn nó vào một thông điệp.

① Mở datestamp.sh bằng vi datestamp.sh, nhấn i để vào insert mode, và viết #!/bin/sh ở dòng đầu.

② Trong script, thu đầu ra của date vào một biến bằng thay thế lệnh $(), rồi chèn biến đó vào một chuỗi nháy kép và in trên một dòng (bạn có thể sao chép nội dung cần viết từ bảng đáp án và dán vào).

③ Nhấn Esc, lưu và thoát bằng :wq, rồi cấp quyền thực thi cho tệp.

④ Chạy script và xác nhận một thông điệp chứa ngày được hiển thị.

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

Tính toán số học — $(( ))

Bên trong $(( ))tính toán số học với số nguyên.

$(( 3 + 4 )) được thay bằng 7.

Bạn có thể dùng + để cộng, - để trừ, * để nhân, / để chia, và % cho phần dư.

Biến đi vào không cần $, viết trực tiếp theo tên như $(( n * 2 )).

Tính toán số học hoạt động ra sao
$(( 3 + 4 ))tính biểu thức= 7n=5$(( n * 2 ))= 10
Biểu thức bên trong $(( )) được tính: $(( 3 + 4 ))7, và với n=5 thì $(( n * 2 ))10.
echo "sum: $(( 10 + 5 ))"        # cộng được 15
n=7
echo "double: $(( n * 2 ))"      # biến đi vào không cần $
echo "rest: $(( 17 % 5 ))"        # phần dư với % là 2

Tạo một script làm tính toán số học với số nguyên bằng tính toán số học $(( )).

① Mở calc.sh bằng vi calc.sh, nhấn i để vào insert mode, và viết #!/bin/sh ở dòng đầu.

② Trong script, gán hai số vào các biến, dùng $(( )) để làm vài phép tính như tổng, tích, và phần dư, rồi in các kết quả trên một dòng (bạn có thể sao chép nội dung cần viết từ bảng đáp án và dán vào).

③ Nhấn Esc, lưu và thoát bằng :wq, rồi cấp quyền thực thi cho tệp.

④ Chạy script và xác nhận các kết quả tính toán được hiển thị.

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

Nhận đầu vào — read

read v đọc một dòng đầu vào và đặt nó vào biến v.

Bạn dùng nó khi muốn hỏi người dùng một giá trị bên trong một script.

Trong console của khóa học này, truyền đầu vào bằng pipe, như printf 'value\n' | ./greet.sh, chạy ổn định.

In một lời nhắc bằng echo trước read giúp rõ hơn cần gõ gì.

Nhận đầu vào với read
echo "enter:"hiện lời nhắcchờ đầu vàotruyền giá trị qua piperead nn=7
read n đọc một dòng và đặt vào n. Truyền một giá trị qua pipe bằng printf đưa nó tới read mà không cần gõ tay.
echo "enter your name:"          # nhắc cần gõ gì
read who                         # đọc một dòng vào who
echo "hi, $who"                  # chèn giá trị bạn nhận được vào văn bản
printf 'bob\n' | (read who; echo "hi, $who")   # đầu vào cũng có thể đến từ pipe

Tạo một script đọc một dòng đầu vào bằng read và chèn nó vào một câu chào.

① Mở greet.sh bằng vi greet.sh, nhấn i để vào insert mode, và viết #!/bin/sh ở dòng đầu.

② Trong script, hiện một lời nhắc bằng echo, đọc một dòng cho tên bằng read, rồi chèn tên đó vào một câu chào nháy kép và in ra (bạn có thể sao chép nội dung cần viết từ bảng đáp án và dán vào).

③ Nhấn Esc, lưu và thoát bằng :wq, rồi cấp quyền thực thi cho tệp.

④ Chạy script với đầu vào được truyền qua pipe, và xác nhận một câu chào chứa tên bạn nhập được hiển thị.

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

Chèn số đếm vào thông điệp bằng thay thế lệnh

Thay thế lệnh $() thường được dùng để thu một "kết quả đếm", như số lượng tệp, vào một biến.

Viết kiểu như n=$(ls *.txt | wc -l) thì kết quả kết hợp của lswc -l đi vào n.

Chèn biến đó vào một chuỗi nháy kép và bạn có thể dựng một thông điệp một dòng dễ đọc bao gồm cả số đếm.

Chèn số đếm vào thông điệp
ls vdemo/*.txtsố đếm = 2n=$( ... )chèn $n vào văn bảntxt files: 2đếm bằng wc -lđếm chúngchèn vào thông điệp
Số đếm từ lswc -l đi vào n qua thay thế lệnh, và chèn nó vào văn bản hiển thị txt files: 2.

Tạo một script lấy số lượng tệp văn bản vào một biến bằng thay thế lệnh và hiển thị nó được chèn trong một thông điệp.

① Làm nguyên liệu để đếm, tạo một thư mục làm việc bằng mkdir -p vdemo và tạo hai tệp .txt, như printf 'a\n' > vdemo/a.txt.

② Mở count-txt.sh bằng vi count-txt.sh, nhấn i để vào insert mode, và viết #!/bin/sh ở dòng đầu.

③ Trong script, lấy số lượng tệp .txt trong vdemo vào một biến bằng thay thế lệnh, rồi chèn biến đó vào một chuỗi nháy kép và hiện một thông điệp có số đếm (bạn có thể sao chép nội dung cần viết từ bảng đáp án và dán vào).

④ Nhấn Esc, lưu bằng :wq, cấp quyền thực thi, rồi chạy nó và xác nhận một thông điệp chứa số đếm được hiển thị.

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 1Cách viết nào là đúng để gán cho một biến shell?

Câu 2echo '$name' hiển thị thế nào (khi name=alice)?

Câu 3Cách nào đặt đầu ra của một lệnh vào một biến như một giá trị?