GIÁO TRÌNH HỆ ĐIỀU HÀNH UNIX - LINUX - Trang 129

1
2

Chú ý: không được có dấu cách (space) đằng trước hay đằng sau dấu bằng. Tên biến là

phân biệt chữ hoa chữ thường. Để truy xuất đến một biến ta dùng cú pháp sau; $tên_biến.
Chẳng hạn ta muốn in ra giá trị của biến myname ở trên ta chỉ cần ra lệnh: echo $myname.

$myname.
$myname.

Một số ví dụ về cách đặt tên biến:

$ no=10 #

đây là một cách khai báo hợp lệ

Nhưng cách khai báo dưới đây là không hợp lệ

$ no =10

#có dấu cách sau tên biến

$ no= 10

# có dấu cách sau dấu =

$ no = 10

# có dấu cách cả đằng trước lẫn đằng sau dấu =

Ta có thể khai báo một biến nhưng nó có giá trị NULL như trong những cách sau:

$ vech=
$ vech=""

Nếu ta ra lệnh in giá trị của biến này thì ta sẽ thu được một giá trị NULL ra màn hình

(một dòng trống).

Biến tự động (hay biến-chỉ đọc, tham số vị trí) là các biến do shell đã có sẵn; tên các

biến này cho trước. Có 10 biến tự động:

$0, $1, $2, ..., $9

Tham biến “$0” chứa tên của lệnh, các tham biến thực bắt đầu bằng “$1” (nếu tham số

cú vị trí lớn hơn 9, ta phải sử dụng cú pháp ${} – ví dụ, ${10} để thu được các giá trị của
chúng). Shell bash có ba tham biến vị trí đặc biệt, “$#”, “$@”, và “$#”. “$#” là số lượng
tham biến vị trí (không tính “$0”). “$*” là một danh sách tất cả các tham biến vị trí loại trừ
“$0”, đã được định dạng như là một xâu đơn với mỗi tham biến được phân cách bởi kớ tự
$IFS. “$@” trả về tất cả các tham biến vị trí được đưa ra dưới dạng N xâu được bao trong
dấu ngoặc kép.

Sự khác nhau giữa “$*” và “$@” là gì và tại sao lại có sự phân biệt? Sự khác nhau cho

phép ta xử lý các đối số dòng lệnh bằng hai cách. Cách thứ nhất, “$*”, do nó là một xâu
đơn, nên có thể được biểu diễn linh hoạt hơn không cần yêu cầu nhiều mã shell. “$@” cho
phép ta xử lý mỗi đối số riêng biệt bởi vì giá trị của chúng là N đối số độc lập.

Dòng ra (hay dòng vào) tương ứng với các tham số vị trí là các "từ" có trong các dòng

đó. Ví dụ,

$chay vao chuong trinh roi

Nếu chay là một lệnh thì dòng vào này thì:

$0 có giá trị chay

$1 có giá trị vao

$2 có giá trị chuong

$3 có giá trị trinh

$4 có giá trị roi

Một ví dụ khác về biến vị trí giúp ta phân biệt được sự khác nhau giữa biến $* và $@:

#!/bin/bash
#testparm.sh
function cntparm
{