Unix / Linux - Thay thế Shell
Xin chào, các bạn học lập trình! Hôm nay, chúng ta sẽ cùng nhau khám phá thế giới kỳ diệu của Thay thế Shell trong Unix và Linux. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - tôi sẽ hướng dẫn bạn từng bước qua chủ đề này, giống như tôi đã làm cho hàng trăm sinh viên trong những năm dạy học của mình. Vậy, hãy cùng bắt đầu hành trình thú vị này nhé!
Thay thế là gì?
Trước khi chúng ta đi vào chi tiết, hãy hiểu thế nào là thay thế trong ngữ cảnh lập trình shell.
Thay thế giống như một trick ma thuật trong shell. Đó là khi shell thay thế một đoạn văn bản này bằng một đoạn văn bản khác trước khi thực thi một lệnh. Hãy tưởng tượng bạn đang nướng bánh, và công thức yêu cầu "1 cốc đường". Nhưng bạn đã hết đường! Vậy bạn quyết định sử dụng mật ong thay thế. Đó chính là điều thay thế làm - nó thay thế một nguyên liệu (hoặc trong trường hợp của chúng ta, một đoạn văn bản) bằng một nguyên liệu khác.
Trong lập trình shell, chúng ta có ba loại thay thế chính:
- Thay thế Lệnh
- Thay thế Biến
- Thay thế Toán học
Chúng ta sẽ tập trung vào hai loại đầu tiên trong bài hướng dẫn này. Hãy bắt đầu với Thay thế Lệnh!
Thay thế Lệnh
Thay thế Lệnh là gì?
Thay thế lệnh là một tính năng cho phép bạn sử dụng đầu ra của một lệnh làm đối số cho một lệnh khác. Nó giống như có một trợ lý giúp bạn chạy một lệnh và sau đó thì thầm kết quả cho bạn, mà bạn có thể sử dụng trong lệnh chính của mình.
Cách thực hiện Thay thế Lệnh
Có hai cách để thực hiện thay thế lệnh:
- Sử dụng dấu ngoặc đơn (`)
- Sử dụng cú pháp $() (phương pháp được ưa thích)
Hãy cùng xem một số ví dụ để hiểu rõ hơn.
Ví dụ 1: Sử dụng ngoặc đơn
current_date=`date`
echo "Ngày hôm nay là: $current_date"
Khi bạn chạy脚本 này, nó sẽ output một thứ gì đó như:
Ngày hôm nay là: Mon May 15 10:30:45 EDT 2023
Điều gì đã xảy ra ở đây? Shell đã thực thi lệnh date
, bắt đầu đầu ra của nó, và sau đó sử dụng đầu ra đó làm giá trị cho biến current_date
.
Ví dụ 2: Sử dụng cú pháp $()
files_count=$(ls | wc -l)
echo "Có $files_count tệp trong thư mục hiện tại."
Script này sẽ đếm số lượng tệp trong thư mục hiện tại và output một thứ gì đó như:
Có 15 tệp trong thư mục hiện tại.
Trong ví dụ này, shell đầu tiên chạy lệnh ls
để liệt kê tất cả các tệp, pip (|) đầu ra đó vào wc -l
để đếm số lượng dòng, và sau đó gán kết quả cho biến files_count
.
Tại sao sử dụng Thay thế Lệnh?
Thay thế lệnh vô cùng hữu ích khi bạn cần sử dụng kết quả của một lệnh làm phần của một lệnh khác hoặc để gán nó cho một biến. Nó giống như có một瑞士军刀 trong bộ công cụ lập trình của bạn!
Thay thế Biến
Bây giờ, hãy chuyển sang Thay thế Biến. Đây là một tính năng mạnh mẽ khác cho phép bạn sử dụng giá trị của một biến trong script của mình.
Thay thế Biến là gì?
Thay thế biến là khi shell thay thế tên biến bằng giá trị của nó. Nó giống như có một biệt danh cho ai đó - khi bạn sử dụng biệt danh, mọi người đều biết bạn đang đề cập đến người đó.
Cách thực hiện Thay thế Biến
Để thực hiện thay thế biến, bạn chỉ cần sử dụng tên biến đi kèm với dấu dollat ($).
Ví dụ 1: Thay thế Biến cơ bản
name="Alice"
echo "Xin chào, $name!"
Output:
Xin chào, Alice!
Ở đây, shell đã thay thế $name
bằng giá trị của nó, "Alice".
Ví dụ 2: Sử dụng ngoặc móc
Đôi khi, bạn cần sử dụng ngoặc móc {} để xác định rõ ràng nơi tên biến kết thúc.
fruit="apple"
echo "Tôi thích ${fruit}s"
Output:
Tôi thích apples
Nếu không có ngoặc móc, shell sẽ tìm kiếm một biến名叫 fruits
, mà không tồn tại.
Kỹ thuật Thay thế Biến Nâng cao
Hãy xem một số kỹ thuật nâng cao:
1. Giá trị mặc định
Bạn có thể cung cấp một giá trị mặc định cho biến nếu nó không được đặt:
echo "Xin chào, ${name:-World}!"
Nếu name
không được đặt, nó sẽ output:
Xin chào, World!
2. Gán giá trị mặc định
Bạn có thể gán một giá trị mặc định cho biến nếu nó không được đặt:
echo "Xin chào, ${name:=World}!"
echo $name
Output:
Xin chào, World!
World
3. Hiển thị lỗi nếu không được đặt
Bạn có thể hiển thị một thông báo lỗi nếu biến không được đặt:
echo "Xin chào, ${name:?'Name is not set'}"
Nếu name
không được đặt, nó sẽ hiển thị một lỗi:
bash: name: Name is not set
Dưới đây là bảng tóm tắt các kỹ thuật nâng cao này:
Cú pháp | Mô tả | Ví dụ |
---|---|---|
${var:-word} | Nếu var là null hoặc không được đặt, word sẽ được thay thế. | ${name:-World} |
${var:=word} | Nếu var là null hoặc không được đặt, var sẽ được đặt thành word. | ${name:=World} |
${var:?message} | Nếu var là null hoặc không được đặt, thông báo lỗi sẽ được hiển thị trên stderr. | ${name:?'Name is not set'} |
${var:+word} | Nếu var được đặt, word sẽ được thay thế. Nếu không, không có gì được thay thế. | ${name:+Hello} |
Nhớ rằng, thực hành là cách tốt nhất để thành thạo! Đừng ngại thử nghiệm với các thay thế này trong script của riêng bạn. Nó giống như học骑自行车 - ban đầu có thể trông có vẻ khó, nhưng một khi bạn đã làm quen, bạn sẽ zoom qua lại một cách dễ dàng!
Cuối cùng, các thay thế shell là những công cụ mạnh mẽ có thể làm cho script của bạn trở nên linh hoạt và động hơn. Chúng cho phép bạn sử dụng đầu ra của các lệnh và giá trị của các biến theo những cách sáng tạo. Khi bạn tiếp tục hành trình trong lập trình shell, bạn sẽ thấy mình sử dụng các kỹ thuật này ngày càng nhiều.
Chúc các bạn lập trình vui vẻ, và nhớ rằng - trong thế giới lập trình, sự tò mò là người bạn tốt nhất của bạn!
Credits: Image by storyset