Sử dụng các toán tử bash

Một phần của tài liệu Quan-tri-mang-nuy-vn-17308_-_He_dieu_hanh_ma_nguon_mo.pdf (Trang 66 - 68)

Các toán tstring

Các toán tử string, cũng đƣợc gọi là các toán tử thay thế trong tài liệu về bash, kiểm tra giá trị của biến là chƣa gán giá trị hoặc khộng xác định. Bảng dƣới là danh sách các toán tử này cùng với miêu tả cụ thể cho chức năng của từng toán tử.

Toán tChc năng

${var:- word} Nếu biến tồn tại và xác định thì trả về giá trị của nó, nếu không thì trả về word

${var:= word} Nếu biến tồn tại và xác định thì trả về giá trị của nó, nếu không thì gán biến thành word, sau đó trả về giá trị của nó ${var:+ word} Nếu biến tồn tại và xác định thì trả về word, còn không

thì trả về null

${var:?message} Nếu biến tồn tại và xác định thì trả về giá trị của nó, còn không thì hiển thị “bash: $var:$message” và thoát ra khỏi lệnh hay tập lệnh hiện thời.

${var: offset[:length]} Trả về một xâu con của var bắt đầu tại offset của độ dài length. Nếu length bị bỏ qua, toàn bộ xâu từ offset sẽ đƣợc trả về.

Các toán tstring ca bash

Để minh hoạ, hãy xem xét một biến shell có tên là status đƣợc khởi tạo với giá trị defined. Sử dụng 4 toán tử string đầu tiên cho kết quả status nhƣ sau:

$echo ${status:-undefined} defined $echo ${status:=undefined} defined $echo ${status:+undefined} undefined

$echo ${status:?Dohhh\! undefined}

defined

Bây giờ sử dụng lệnh unset để xoá biến status, và thực hiện vẫn các lệnh đó, đƣợc output nhƣ sau:

- 66 - $unset status $echo ${status:-undefined} undefined $echo ${status:=undefined} undefined $echo ${status:+undefined} undefined $unset status

$echo ${status:?Dohhh\! undefined}

bash:status Dohhh! Undefined

Cần thiết unset status lần thứ hai vì ở lệnh thứ ba, echo ${status:+undefined}, khởi tạo lại status thành undefined.

Các toán tử substring đã có trong danh sách ở bảng trên đặc biệt có ích. Hãy xét biến foo có giá trị Bilbo_the_Hobbit. Biểu thức ${foo:7} trả về he_Hobbit, trong khi ${foo:7:5} lại trả về he_Ho.

Các toán tPattern-Matching

Các toán tử pattern-matching có ích nhất trong công việc với các bản ghi độ dài biến hay các xâu đã đƣợc định dạng tự do đƣợc định giới bởi các ký tự cố định. Biến môi trƣờng $PATH là một ví dụ. Mặc dù nó có thể khá dài, các thƣ mục riêng biệt đƣợc phân định bởi dấu hai chấm. Bảng dƣới là danh sách các toán tử Pattern-Matching của bash và chức năng của chúng.

Toán tử Chức năng

${var#pattern} Xoá bỏ phần khớp (match) ngắn nhất của pattern trƣớc var và trả về phần còn lại

${var##pattern} Xoá bỏ phần khớp (match) dài nhất của pattern trƣớc var và trả về phần còn lại

${var%pattern} Xoá bỏ phần khớp ngắn nhất của pattern ở cuối var và trả về phần còn lại

${var%%pattern} Xoá bỏ phần khớp dài nhất của pattern ở cuối var và trả về phần còn lại

${var/pattern/string} Thay phần khớp dài nhất của pattern trong var bằng string. Chỉ thay phần khớp đầu tiên. Toán tử này chỉ có trong bash 2.0 hay lớn hơn.

${var//pattern/string} Thay phần khớp dài nhất của pattern trong var bằng string. Thay tất cả các phần khớp. Toán tử này có trong bash 2.0 hoặc lớn hơn.

Các toán tbash Pattern-Matching

Thông thƣờng quy tắc chuẩn của các toán tử bash pattern-matching là thao tác với file và tên đƣờng dẫn. Ví dụ, giả sử ta có một tên biến shell là mylife có giá trị là /usr/src/linux/Documentation/ide.txt (tài liệu về trình điều khiển đĩa IDE của nhân). Sử dụng mẫu “/*” và “*/” ta có thể tách đƣợc tên thƣ mục và tên file.

#!/bin/bash

############################################

myfile=/usr/src/linux/Documentation/ide.txt echo „${myfile##*/}=‟ ${myfile##*/} echo „basename $myfile =‟ $(basename $myfile)

echo „${myfile%/*}=‟ ${myfile%/*}

- 67 -

Lệnh thứ 2 xoá xâu matching “*/” dài nhất trong tên file và trả về tên file. Lệnh thứ 4 làm khớp tất cả mọi thứ sau “/”, bắt đầu từ cuối biến, bỏ tên file và trả về đƣờng dẫn của file. Kết quả của tập lệnh này là:

$ ./pattern.sh

${myfile##*/} = ide.txt basename $myfile = ide.txt

${myfile%/*} = /usr/src/linux/Documentation dirname $myfile = /usr/src/linux/Documentation

Để minh hoạ về các toán tử pattern-matching và thay thế, lệnh thay thế mỗi dấu hai chấm trong biến môi trƣờng $PATH bằng một dòng mới, kết quả hiển thị đƣờng dẫn rất dễ đọc (ví dụ này sẽ sai nếu ta không có bash phiên bản 2.0 hoặc mới hơn):

$ echo –e ${PATH//:/\\n}

/usr/local/bin /bin /usr/bin /usr/X11R6/bin /home/kwall/bin /home/wall/wp/wpbin Các toán tso sánh chui str1 = str2 : str1 bằng str2 str1 != str2 : str1 khác str2

-n str : str có độ dài lớn hơn 0 (khác null) -z str : str có độ dài bằng 0 (null)

Các toán tử so sánh số học

-eq : bằng

-ge : lớn hơn hoặc bằng -gt : lớn hơn

-le : nhỏ hơn hoặc bằng -lt : nhỏ hơn

-ne : khác

Một phần của tài liệu Quan-tri-mang-nuy-vn-17308_-_He_dieu_hanh_ma_nguon_mo.pdf (Trang 66 - 68)

Tải bản đầy đủ (PDF)

(93 trang)