Trình thay thế Shell

Trình thay thế (Substitution) trong Unix/Linux là gì?

Shell thực hiện phép thế khi nó gặp một biểu thức mà chứa một hoặc nhiều ký tự đặc biệt.

Ví dụ:

Dưới đây là ví dụ, trong khi in một giá trị của biến, nó sẽ được thay thế bởi giá trị của biến. Cùng thời gian đó “\n” được thay thế bởi dòng mới.

#!/bin/sh

a=10
echo -e "Value of a is $a \n"

Nó sẽ tạo kết quả như dưới đây. Tại đây, chức năng -e sẽ cho phép biên dịch dãy thoát dấu chéo ngược.

Value of a is 10

Nếu không có chức năng -e thì nó tạo ra kết quả sau:

Value of a is 10\n

Dưới đây là các dãy thoát mà có thể được sử dụng bởi lệnh echo:

Dãy thoát Miêu tả
\\ Dấu chéo ngược
\a Dấu hiệu cảnh báo (BEL)
\b Phím lùi (backspace)
\c Gạch chéo xuống dòng
\f form feed
\n Dòng mới
\r Quay trở lại
\t Tab ngang
\v Tab dọc

Bạn có thể sử dụng chức năng -E để không cho phép biên dịch dấu ngoặc chéo (mặc định).

Bạn có thể sử dụng chức năng -n để không cho phép chèn của dòng mới.

Trình thay thế lệnh (Command Substitution) trong Unix/Linux

Trình thay thế lệnh là một kỹ thuật mà bởi nó Shell thực hiện một tập hợp các lệnh đã cung cấp và sau đó thay thế vị trí kết quả của các lệnh.

Cú pháp

Trình thay thế lệnh được thực hiện khi một lệnh được cung cấp như sau:

`command`

Khi thực hiện trình thay thế lệnh, đảm bảo rằng bạn đang sử dụng 2 dấu trích dẫn đơn kiểu (`), chứ không phải là “”.

Ví dụ

Trình thay thế lệnh thông thường được sử dụng để gán đầu ra của một lệnh tới một biến. Mỗi một ví dụ sau giải thích cách sử dụng trình thay thế lệnh.

#!/bin/sh

DATE=`date`
echo "Date is $DATE"

USERS=`who | wc -l`
echo "Logged in user are $USERS"

UP=`date ; uptime`
echo "Uptime is $UP"

Nó sẽ tạo ra kết quả sau:

Date is Thu Jul  2 03:59:57 MST 2009
Logged in user are 1
Uptime is Thu Jul  2 03:59:57 MST 2009
03:59:57 up 20 days, 14:03,  1 user,  load avg: 0.13, 0.07, 0.15

Trình thay thế biến (Variable Substitution) trong Unix/Linux

Sự thay thế biến cho phép người lập trình Shell thao tác giá trị của biến dựa trên trạng thái của nó.

Dưới đây là bảng cho tất cả các trình thay thế có thể:

Mẫu Miêu tả
${var} Thay thế giá trị của var.
${var:-word} Nếu var là null hoặc unset, thì word được thay thế cho var. Giá trị của var không thay đổi.
${var:=word} Nếu var là null hoặc unset, var được thiết lập là giá trị của word .
${var:?message} Nếu var là null hoặc unset, message được in là lỗi. Lệnh này kiểm tra xem các biến có được thiết lập đúng không.
${var:+word} Nếu var được thiết lập, word được thay thế cho var. Giá trị của varkhông thay đổi.

Ví dụ:

Dưới đây là ví dụ minh họa các trạng thái đa dạng của trình thay thế trên:

#!/bin/sh

echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}"

echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}"

unset var
echo ${var:+"This is default value"}
echo "3 - Value of var is $var"

var="Prefix"
echo ${var:+"This is default value"}
echo "4 - Value of var is $var"

echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"

Nó sẽ tạo ra kết quả sau:

Variable is not set
1 - Value of var is
Variable is not set
2 - Value of var is Variable is not set

3 - Value of var is
This is default value
4 - Value of var is Prefix
Prefix
5 - Value of var is Prefix