unix

Thay thế là gì?

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

Thí d

Ở đây, giá trị in của biến được thay thế bằng giá trị của nó. Đồng thời, “\ n” được thay thế bằng một dòng mới

#!/bin/sh

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

Bạn sẽ nhận được kết quả sau. Ở đây tùy chọn -e cho phép giải thích các dấu gạch chéo ngược thoát ra.

Value of a is 10

Sau đây là kết quả không có tùy chọn -e –

Value of a is 10\n

Các chuỗi thoát sau đây có thể được sử dụng trong lệnh echo:

Sr.No.Thoát & Mô tả
1\\ dấu gạch chéo ngược
2\một cảnh báo (BEL)
3\ b backspace
4\c ngăn chặn dòng mới theo sau
5\ f thức ăn dạng
6\N dòng mới
7\ r vận chuyển trở lại
số 8\ t Tab ngang
9\ v tab dọc

Bạn có thể sử dụng tùy chọn -E để vô hiệu hóa việc giải thích các dấu gạch chéo ngược thoát ra (mặc định).

Bạn có thể sử dụng tùy chọn -n để vô hiệu hóa việc chèn một dòng mới.

Thay thế lnh

Thay thế lệnh là cơ chế mà trình bao thực hiện một tập hợp các lệnh nhất định và sau đó thay thế đầu ra của chúng thay cho các lệnh.

Cú pháp

Việc thay thế lệnh được thực hiện khi một lệnh được đưa ra dưới dạng:

`command`

Khi thực hiện thay thế lệnh, hãy đảm bảo rằng bạn sử dụng dấu ngoặc kép, không phải ký tự trích dẫn đơn lẻ.

Thí d

Thay thế lệnh thường được sử dụng để gán đầu ra của lệnh cho một biến. Mỗi ví dụ sau đây thể hiện sự 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"

Khi thực hiện, bạn sẽ nhận được 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

Thay thế biến

Thay thế biến cho phép người lập trình shell thao tác giá trị của một biến dựa trên trạng thái của nó. Đây là bảng sau đây cho tất cả các thay thế có thể

Sr.No.Biểu mẫu & Mô tả
1$ {was} Thay thế giá trị của var .
2$ {var: -word} Nếu var là null hoặc không được đặt, từ được thay thế cho var . Giá trị của var không thay đổi.
3$ {var: = word} Nếu var là null hoặc không được đặt, var được đặt thành giá trị của từ .
4$ {var:? message} Nếu var là null hoặc không được đặt, thông báo sẽ được in thành lỗi chuẩn. Điều này kiểm tra xem các biến có được đặt chính xác hay không.
5$ {var: + word} Nếu var được đặt, từ được thay thế cho var. Giá trị của var không thay đổi.

Thí d

Sau đây là ví dụ để hiển thị các trạng thái khác nhau của sự 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}"

Khi thực hiện, bạn sẽ nhận được 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

Unix / Linux – Cơ chế trích dẫn Shell

Trong chương này, chúng ta sẽ thảo luận chi tiết về các cơ chế trích dẫn Shell. Chúng ta sẽ bắt đầu bằng cách thảo luận về siêu nhân vật.

Các siêu ký t

Unix Shell cung cấp các siêu ký tự khác nhau có ý nghĩa đặc biệt khi sử dụng chúng trong bất kỳ Tập lệnh Shell nào và gây ra sự kết thúc của một từ trừ khi được trích dẫn.

Ví dụ ,? khớp với một ký tự trong khi liệt kê các tệp trong thư mục và dấu * khớp với nhiều ký tự. Đây là danh sách hầu hết các ký tự đặc biệt của shell (còn được gọi là siêu ký tự) –

* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab

Một ký tự có thể được trích dẫn (tức là, được tạo ra để thay thế cho chính nó) bằng cách đặt trước nó bằng dấu \ .

Thí d

Ví dụ sau đây cho thấy làm thế nào để in một * hoặc một 

#!/bin/sh

echo Hello; Word

Khi thực hiện, bạn sẽ nhận được kết quả sau:

Hello
./test.sh: line 2: Word: command not found
shell returned 127

Bây giờ chúng ta hãy thử sử dụng một ký tự được trích dẫn

#!/bin/sh

echo Hello\; Word

Khi thực hiện, bạn sẽ nhận được kết quả sau:

Hello; Word

Ký hiệu $ là một trong những ký tự siêu lớn, vì vậy nó phải được trích dẫn để tránh việc xử lý đặc biệt bởi shell

#!/bin/sh

echo "I have \$1200

Khi thực hiện, bạn sẽ nhận được kết quả sau:

I have $1200

Bảng sau liệt kê bốn hình thức trích dẫn:

Sr.No.Trích dẫn & Mô tả
1Trích dẫn duy nhất Tất cả các ký tự đặc biệt giữa các dấu ngoặc kép này sẽ mất đi ý nghĩa đặc biệt của chúng.
2Dấu ngoặc kép Hầu hết các ký tự đặc biệt giữa các dấu ngoặc kép này đều mất ý nghĩa đặc biệt với những ngoại lệ này – $`\ $\ ‘\ “\\
3Dấu gạch chéo ngược Bất kỳ ký tự nào ngay sau dấu gạch chéo ngược sẽ mất đi ý nghĩa đặc biệt của nó.
4Báo giá lại Bất kỳ thứ gì ở giữa các dấu ngoặc kép sẽ được coi là một lệnh và sẽ được thực thi.

Báo giá đơn

Hãy xem xét một lệnh echo có chứa nhiều ký tự shell đặc biệt –

echo <-$1500.**>; (update?) [y|n]

Đặt dấu gạch chéo ngược trước mỗi ký tự đặc biệt thật tẻ nhạt và làm cho dòng khó đọc –

echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]

Có một cách dễ dàng để trích dẫn một nhóm lớn các ký tự. Đặt một dấu nháy đơn (‘) ở đầu và cuối chuỗi –

echo '<-$1500.**>; (update?) [y|n]'

Các ký tự trong dấu ngoặc kép được trích dẫn giống như thể có dấu gạch chéo ngược ở phía trước mỗi ký tự. Với điều này, lệnh echo sẽ hiển thị theo cách thích hợp.

Nếu một dấu nháy đơn xuất hiện trong một chuỗi được xuất ra, bạn không nên đặt toàn bộ chuỗi trong dấu nháy đơn, thay vào đó bạn nên đặt trước bằng cách sử dụng dấu gạch chéo ngược (\) như sau:

echo 'It\'s Shell Programming

Du ngoc kép

Cố gắng thực thi tập lệnh shell sau. Tập lệnh shell này sử dụng một trích dẫn duy nhất –

VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'

Khi thực hiện, bạn sẽ nhận được kết quả sau:

$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]

Đây không phải là những gì phải được hiển thị. Rõ ràng là các dấu ngoặc kép ngăn cản sự thay thế biến. Nếu bạn muốn thay thế các giá trị của biến và làm cho dấu phẩy ngược hoạt động như mong đợi, thì bạn cần đặt các lệnh của mình trong dấu ngoặc kép như sau:

VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"

Khi thực hiện, bạn sẽ nhận được kết quả sau:

ZARA owes <-$1500.**>; [ as of (07/02) ]

Dấu ngoặc kép lấy đi ý nghĩa đặc biệt của tất cả các ký tự ngoại trừ những ký tự sau:

  • $ để thay thế tham số
  • Dấu ngoặc kép để thay thế lệnh
  • \ $ để bật ký hiệu đô la theo nghĩa đen
  • \ ` để kích hoạt các dấu ngoặc kép theo nghĩa đen
  • \ “ để bật dấu ngoặc kép được nhúng
  • \\ để bật dấu gạch chéo ngược được nhúng
  • Tất cả các ký tự \ khác đều là chữ (không phải đặc biệt)

Các ký tự trong dấu ngoặc kép được trích dẫn giống như thể có dấu gạch chéo ngược ở phía trước mỗi ký tự. Điều này giúp lệnh echo hiển thị đúng.

Nếu một dấu nháy đơn xuất hiện trong một chuỗi được xuất ra, bạn không nên đặt toàn bộ chuỗi trong dấu nháy đơn, thay vào đó bạn nên đặt trước bằng cách sử dụng dấu gạch chéo ngược (\) như sau:

echo 'It\'s Shell Programming'

Các báo sau

Đặt bất kỳ lệnh Shell nào giữa các dấu ngoặc kép sẽ thực hiện lệnh.

Cú pháp

Đây là cú pháp đơn giản để đặt bất kỳ lệnh Shell nào giữa các dấu ngoặc kép –

var=`command`

Thí d

Lệnh ngày được thực hiện trong ví dụ sau và kết quả được tạo ra được lưu trữ trong biến DATA.

DATE=`date`

echo "Current Date: $DATE"

Khi thực hiện, bạn sẽ nhận được kết quả sau:

Current Date: Thu Jul 2 05:28:45 MST 2009

Unix / Linux – Chuyển hướng đầu vào / đầu ra của Shell (xem thêm)

Để lại một bình luận