Bài 9: Cơ chế thay thế của Shell
9.6 Các quy tắc thay thế của Shell
9.5.1 Dùng các dấu nháy:
‘………’ Shell không thực hiện phép thay thế các ký tự trong dấu nháy đơn
“………” Shell thực hiện phép thay thế trong dấu nháy kép các ký tự: $ \ và `
Thí dụ:
$NOM=jean $echo nom=$NOM
nom=jean thông dịch biến
$echo ‘nom=$NOM’
nom=$NOM hiển thị không thay thế $ echo “nom=$NOM”
nom=jean thông dịch biến $echo *
file1 file2 … thông dịch ký tự *
$echo “*”
* hiển thị không thông dịch
Bảng tóm tắt về thông dịch các ký tự đặc biệt trong các dấu nháy:
Các ký tự đặc biệt dùng trong dấu nháy Dấu nháy được
dùng ‘ ` hoặc ) “ \ $ * ‘ f n n n n n ` hoặc $( n f n o o o “ n o f o o n Trong đó: f = kết thúc xâu ký tự
o = ký tự được thông dịch (có ý nghĩa đặc biệt) n = ký tự không được thông dịch (bình thường) Thí dụ cách sử dụng bảng tóm tắt:
- Ký tự $ được thông dịch như một metacharacter khi nó ở trong $() hoặc “”, khi biến được thay thế bằngh giá trị của nó. Ngược lại, nó không được thông dịch khi ở giữa hai dấu nháy đơn.
9.5.2 Thay thế đúp
Khi Shell làm thao tác thay thế nó quét một lần dòng lệnh và thay thế biến có $ đằng trước.
Ta có thể làm hai lần động tác quét bằng dùng lệnh eval của Shell. Như vậy lệnh đứng sau eval được thay thế 2 lần trước khi chạy.
Thí dụ:
Shell_script last_argument hiển thị đối cuối cùng của dòng lệnh: $cat last_argument set -x eval echo $”$#” $last_argument 1 A Z 3 F G + eval echo $6 + echo G G Bài tập:
1. Hãy viết shell_script copy_file để sao chép một file của một người sử dụng khác, sau đó đổi nhóm và người sử dụng của file sao.
copy_file file1 file2 user group Gợi ý: sử dụng các lệnh cp, chown, chgrp
2. Hãy viết shell_script dup_file có chức năng như copy_file ở trên nhưng tên các file, tên người sử dụng và tên nhóm được vào bằng hỏi đáp.