Các Lược Giảng Chuyên Sâu về Sử Dụng Văn Lệnh BASH trong Linux/Bài 2

Từ Thư viện Khoa học VLOS
Bước tới: chuyển hướng, tìm kiếm

Loạt bài "Các Lược Giảng Chuyên Sâu về Sử Dụng Văn Lệnh BASH trong Linux" của tác giả Làng Đậu giữ bản quyền 2006. Người đọc chỉ được sử dụng cho mụch đích học tập hay giảng dạy cho cá nhân. Cấm mọi hình thức sao chép, đăng lại, hay in lại nhằm mụch đích mua bán hay trục lợi mà không có sự cho phép chính thức của tác giả. Mọi thông tin về việc phổ biến rộng rãi có tính quảng bá tài liệu này cho mụch đích giáo dục hay các phê bình, đề nghị về nội dung bài giảng xin liên lạc về vo_quang_nhan@yahoo.com

Bài 2 - Đơn vị của ngôn ngữ: Biến, Truy cập điều chỉnh nội dung đặc điểm của biến

Mục lục

Biến, tham số, và quy tắt đặt tên biến

Đối với BASH không có sự phân biệt nào giữa một biến và một tham số. Việc phân biệt này hoàn toàn tùy thuộc vào người lập trình tự quy ước lấy. Do đó, khi nói về biến tức là nói về tham số. Như các ngôn ngữ lập trình khác, biến và tham số là một phận rất quan trọng của ngôn ngữ BASH. Trong Linux/UNIX có hai loại: biến địa phương (local variable) và biến môi trường (environment variable).

Các biến môi trường

Là biến truy cập được cho tất cả các tiến trình con tạo ra từ hệ vỏ ở thời điểm mà chúng đưọc định nghiã. Nhiều biến môi trường được tạo ra ngay trong các văn lệnh khởi động và được cài để trở thành biến toàn cục (global varibable). Để thông báo một biến là biến môi trường thì phải dùng lệnh có cú pháp là một trong các dạng:

 export [TÊN_BIẾN]
 export [TÊN_BIẾN]=[Giá_trị_gán_cho_TÊN_BIẾN]

Hay là:

 declare -x [TÊN_BIẾN]
 declare -x [TÊN_BIẾN]=[Giá_trị_gán_cho_TÊN_BIẾN]

Một khi đã khai báo như trên thì tất cả các tiến trình con (child process) đều có thể truy cập tới biến này.

Các biến địa phương

Các biến không phải là biến môi trường đều là biến địa phương. Các biến địa phương chỉ có giá trị và có hiệu lực trong văn lệnh hay trình bao mà nó được khai báo lần đầu và được trình bao công nhận ngay sau khi chúng được khai báo. Khác với C/C++ các biến trong một chương trình BASH không có tính cục bộ (nghiã là cho dù 1 biến được khai báo bên trong 1 hàm hay trong một vòng lặp thì chúng đều có hiệu lực sử dụng trong toàn văn lệnh kể từ khi chúng được khai báo và có thể tiếp tục sử dụng mặc dù chúng được truy cập bên ngoài hàm hay vòng lặp đã khai báo tạo ra chúng. Khác với các biến môi trường có tính toàn cục, các biến địa phương sẽ không có hiệu lực cho các tiến trình con (chẳng hạn như là khi gọi các văn lệnh con) và hết hiệu lực ngay khi văn lệnh đó kết thúc (Ngoại trừ có khai báo đặc biệt như là khai báo bao hàm một tập tin qua lệnh [Tên_Tập _Tin] hay khai báo biến toàn cục qua lệnh export)

Quy tắc chung khi đặt tên biến

Tên biến trong BASH có thể là bất kì nhưng cần chú ý một số giới hạn sau:

  • Tên biến chỉ có thể bắt đầu chữ cái trong bảng kí tự Anh ngữ (từ A-Z hay từ a-z) hay kí tự gạch dưới '_'
  • Các kí tự bên trong tên của một biến có thể là các chữ cái trong bảng kí tự Anh ngữ, các chữ số, hay là kí tự gạch dưới '_'. Mọi kí tự khác với quy định này sẽ xem như là một đánh dấu kết thúc của tên một biến.

Lưu ý: Như  C/C++, tên biến trong BASH có tính nhạy cảm (sensitive) với chữ viết hoa và chữ viết thường (nghiã là biến có tên myVar sẽ hoàn toàn khác với biến tên là myvar). Ngoài ra, BASH là ngôn ngữ có kiểu yếu, tức là người lập trình không cần (hay không nhất thiết) phải khai báo kiểu của một biến. Cũng không có sự khác nhau đặc biệt gì để phân biệt một biến và một tham số trong sử dụng

Khai báo

Có hai cách thức chính để khai báo một biến

Khai báo dơn giản và gán giá trị ban đầu (nếu muốn)

Thí dụ:

 myInt=23
 myReal=1.2
 myString="Hello BASH world"
 myNullValue=

Lưu ý:

  • Trong thí dụ trên khi gán giá trị ban đầu cho biến thì không được để khoảng trống (space) ở giữa toán tử dấu bằng (=) với hai vế.
  • Nếu liền sau toán tử dấu bằng (=) mà không có giá trị nào thì BASH sẽ mặc định và gán cho nó giá trị null (tứ là một kiểu string độ dài bằng 0).
  • Người lập trình hoàn toàn có quyền không khai báo trước mà chỉ sử dụng tên biến, ngay lập tức trình thông dịch tìm thấy tên hợp lệ trong một biểu thức thì sẽ mặc định đó là tên biến.

Khai báo biến có kiểu hay có điều kiện

  • Từ khoá declare hay typeset có thể được dùng để chỉ định kiểu cho một biến. Nó cho phép giới hạn các đặc tính của một biến. Các khai báo có kiểu hoàn toàn không thay đổi nếu thay declare bởi typeset

Lưu ý: Tất cả các biến đã được dùng lệnh declare hay typeset ngoại trừ là biến hằng, đều có thể hủy bỏ hiệu lực của của chúng bằng lệnh unset [TÊN_BIẾN]. Khi đó, các giá trị cài đặt lên các biến đã hủy hiệu lực sẽ là null.

Khai báo biến có kiểu mảng (array)

Cú pháp:

  typeset -a [TÊN_BIẾN]

hay

  typeset -a [TÊN_BIẾN]=([GIÁ_TRỊ1],[GIÁ_TRỊ2],[GIÁ_TRỊ3],...)

Thí dụ:

 #declare myArray as an array and assign the initial values for that array
 declare -a myArray=("apple" "banana" "chili" "mango")
 myArray[4]="lime"
 #traversal to all of the elements of myArray
 echo ${myArray[*]}
 #get only one element
 echo ${myArray[2]}

Đoạn văn lệnh trên sẽ trả về các dòng:

 # apple banana chili mango lime
 # chili
Khai báo tên hàm

Cú pháp:

 declare -f [TÊN_HÀM]

Thí dụ:

 typeset -f myFunc
 #implelement myFunc
 myFunc ()
 {
       echo "inside myFunc"
 }
 #listing all code of all functions
 declare -f
 #invoke myFunc
 myFunc
Khai báo biến có kiểu nguyên (integer)

Cú pháp:   declare -i [TÊN_BIẾN] hay

 declare -i [TÊN_BIẾN]=[GIÁ_TRỊ]
Khai báo biến là một hằng

Cú pháp:

 typeset -r [TÊN_BIẾN]

hay

 typeset -r [TÊN_BIẾN]=[GIÁ_TRỊ_HẰNG]

r là chữ viết tắt từ "read-only" nghiã là "chỉ được đọc"

Khai báo biến là biến môi trường

Cú pháp:

  declare -x [TÊN_BIẾN]

hay declare -x [TÊN_BIẾN]=[GIÁ_TRỊ]

Lưu ý: Ngoài ra, lệnh declare hay typeset còn hỗ trợ một chức năng nữa là
typeset -F. Khi gọi lệnh này thì chỉ có tên của các hàm sẽ được kiệt kê.

Thí dụ
 #!/bin/bash
 func1 ()
 {
   echo "This is funct1."
 }
 func2 ()
 { 
   echo "This is funct2."
 }
 echo "Declare -f without argument:" declare -f # Lists the function above.
 echo "Line declare -f with argument:" 
 typeset -f func1 
 declare -i var # var1 is an integer. 
 var=123 
 echo "var declared as $var" 
 var=var+1 
 # Integer declaration and no need for using of 'let' command. "
 echo "var is increased by 1: $var" 
 echo "Attempting to change var to floating point value, 23.4." 
 var=23.4 
 # Error message and no change happened. 
 echo "var is still $var" 
 declare -r pi=3.1416 
 # set pi as constant and assign a value. 
 echo "pi declared as $pi" 
 # Attempt to change read-only variable. 
 pi=3.141592 
 # Generates error message, and exit from script. 
 echo "pi is still $pi" # This line will not execute. 
 exit 0 

Giá trị (hay nội dung) của một biến

[TÊN_BIẾN] là biểu thức giá trị của biến [TÊN_BIẾN]. Thực chất đây chỉ là cách viết gọn của dạng chính tắc là ${[TÊN_BIẾN]} nếu như không có sự nhầm lẫn.

Lưu ý: Trong mọi trường hợp tổng quát để trình dịch không bị hiểu sai thì dạng chính tắc biểu thị giá trị của 1 biến ( tức là viết dưới dạng ${[TÊN_BIẾN]} ) nên được sử dụng

Thí dụ1:

 myInt=33 
 echo "the value of myInt is $myInt" 

Thí dụ2:

 #file: confusing
 #!/bin/bash
 T="file_"
 T1="message_"
 T2="to_you_"
 echo "$T1$T2  cannot be ${T}1 ${T}2"   # display as 'message_to_you_ cannot be file_1file_2'

Biểu thức giá trị mặc định

Trong nhiều trường hợp gía trị của một biến có thể chưa được xác lập hay tên chưa được định nghiã thì người ta có thể trả về một giá trị mặc định. Sau đây là các biểu thức trả về giá trị mặc định mà BASH hỗ trợ:

${[TÊN_BIẾN]:-[Giá_Trị_Mặc_Định]}

Nếu biến [TÊN_BIẾN] đã hết hiệu lực (bằng lệnh unset  hay chưa được khai báo ) hay có giá trị null thì giá trị [Giá_Trị_Mặc_Định] được trả về. Ngoài trường hợp này ra, giá trị của [TÊN_BIẾN] sẽ được trả về. Giữ nguyên hiện trạng của biến [TÊN_BIẾN] trong mọi trường hợp.

${[TÊN_BIẾN]-[Giá_Trị_Mặc_Định]}

Nếu biến [TÊN_BIẾN] chưa được khai báo thì giá trị [Giá_Trị_Mặc_Định] được trả về. Ngoài trường hợp này ra, giá trị của [TÊN_BIẾN] sẽ được trả về. Giữ nguyên hiện trạng của [TÊN_BIẾN] trong mọi trường hợp.

${[TÊN_BIẾN]:=[Giá_Trị_Mặc_Định]}

Nếu biến [TÊN_BIẾN] đã hết hiệu lực (bằng lệnh unset  hay chưa được khai báo ) hay có giá trị null thì <Giá_Trị_Mặc_Định> được trả về đồng thời biến [TÊN_BIẾN] cũng được định nghiã (nếu nó chưa được khai báo) và được gán giá trị <Giá_Trị_Mặc_Định>.

${[TÊN_BIẾN]=[Giá_Trị_Mặc_Định]}

Nếu biến [TÊN_BIẾN] chưa được khai báo thì giá trị <Giá_Trị_Mặc_Định> được trả về, đồng thời biến [TÊN_BIẾN] cũng được định nghiã và được gán giá trị [Giá_Trị_Mặc_Định]. Ngoài trường hợp này ra, giá trị [TÊN_BIẾN] được trả về và giữ nguyên hiện trạng của [TÊN_BIẾN]

${[TÊN_BIẾN]:+[Giá_Trị_Mặc_Định]}

Nếu biến [TÊN_BIẾN] đã khai báo và khác null thì giá trị [Giá_Trị_Mặc_Định]được trả về. Ngoài trường hợp này ra, giá trị null được trả về. Giữ nguyên hiện trạng của [TÊN_BIẾN] trong mọi trường hợp.

${[TÊN_BIẾN]+[Giá_Trị_Mặc_Định]}

Nếu biến [TÊN_BIẾN] đã khai báo thì giá trị [Giá_Trị_Mặc_Định] được trả về. Ngoài trường hợp này ra, giá trị của null được trả về. Giữ nguyên hiện trạng của [TÊN_BIẾN] trong mọi trường hợp.

${[TÊN_BIẾN]:?[Giá_Trị_Mặc_Định]}

Nếu biến [TÊN_BIẾN] đã khai báo và khác null thì giá trị biến [TÊN_BIẾN] được trả về. Ngoài trường hợp này ra, giá trị của [Giá_Trị_Mặc_Định] được gửi đến stderr báo lỗi và kết thúc chương trình

${[TÊN_BIẾN]?[Giá_Trị_Mặc_Định]}

Nếu biến [TÊN_BIẾN] chưa khai báo thì giá trị của [Giá_Trị_Mặc_Định] được gửi đến stderr báo lỗi và kết thúc chương trình. Ngoài trường hợp này ra, giá trị [TÊN_BIẾN] được trả về và giữ nguyên hiện trạng của [TÊN_BIẾN]

Thí dụ

 #!/bin/bash

echo "Default_string is `whoami`" echo -e "Default Expression Test (DXT) \${variable-Default_string}" echo "Not delare variable- DXT return: ${me-`whoami`}" echo "Current value of the variable= $me" me1= echo "Variable contains null value- DXT return: ${me1-`whoami`}" echo "Current value of the variable= $me1" me2=yep echo "Not null variable- DXT return: ${me2-`whoami`}" echo "Current value of the variable= $me2" echo "---------------" echo -e "Default Expression Test (DXT) \${variable:-Default_string}" echo "Not delare variable- DXT return: ${mee:-`whoami`}" echo "Current value of the variable= $mee" mee1= echo "Variable contains null value- DXT return: ${mee1:-`whoami`}" echo "Current value of the variable= $mee1" mee2=yep echo "Not null variable- DXT return: ${mee2:-`whoami`}" echo "Current value of the variable= $mee2" exit

Truy cập có điều chỉnh giá trị của một biến

Một biến trong Linux nếu không bị giới hạn bởi các điều kiện ràng buộc khi khai báo thì nội dung mặc định của nó được hiểu là một chuỗi kí tự. Dãy kí tự này có độ dài bằng không nếu biến không được gán giá trị khác null nào.

BASH hỗ trợ nhiều phép toán để lấy về một cách có định dạng của giá trị chứa trong một biến: Ở đây một dạng thức được hiểu là biểu thức trong đó có chứa các kí tự phỏng định.

Phần thí dụ 6.9 sẽ minh họa rõ ràng cho cách dùng.

${[TÊN_BIẾN]#[Dạng_Thức]}

Trả về giá trị của biến [TÊN_BIẾN] sau khi đã cắt bỏ phần ngắn nhất tương hợp với [Dạng_Thức] tính từ phần đầu của biến [TÊN_BIẾN] (nếu có thể)

${[TÊN_BIẾN]##[Dạng_Thức]}

Trả về giá trị của biến [TÊN_BIẾN] sau khi đã cắt bỏ phần dài nhất tương hợp với [Dạng_Thức] tính từ phần đầu của biến [TÊN_BIẾN] (nếu có thể)

${[TÊN_BIẾN]%[Dạng_Thức]}

Trả về giá trị của biến [TÊN_BIẾN] sau khi đã cắt bỏ phần ngắn nhất tương hợp với [Dạng_Thức] tính từ phần cuối của biến [TÊN_BIẾN] (nếu có thể)

${[TÊN_BIẾN]%%[Dạng_Thức]}

Trả về giá trị của biến [TÊN_BIẾN] sau khi đã cắt bỏ phần dài nhất tương hợp với [Dạng_Thức] tính từ phần cuối của biến [TÊN_BIẾN] (nếu có thể)

${[TÊN_BIẾN]:[Vị_Trí]}

Trả về dãy kí tự con mà [TÊN_BIẾN] chứa, dãy kí tự này bắt đầu từ vị trí thứ [Vị_Trí] cho đến hết phần còn lại nội dung của [TÊN_BIẾN]

${[TÊN_BIẾN]:[Vị_Trí]:[Độ_dài]}

Trả về chuỗi kí tự con mà [TÊN_BIẾN] chứa, chuỗi kí tự này bắt đầu từ vị trí thứ [Vị_Trí] và chỉ chứa đến [Độ_dài] kí tự lấy từ nội dung của [TÊN_BIẾN]

${[TÊN_BIẾN]/[Dạng_Thức]/[Chuỗi_Kí_tự_Thay_Thế]}

Tìm trong nội dung của [TÊN_BIẾN] chuỗi kí tự đầu tiên nào tương hợp với [Dạng_Thức] và thay thế chuỗi đó bằng chuỗi kí tự  [Chuỗi_Kí_tự_Thay_Thế]. Nếu [Chuỗi_Kí_tự_Thay_Thế] không có mặt trong biểu thức thì chuỗi con tìm thấy sẽ bị xóa (thay vì thay thế.)

${[TÊN_BIẾN]//[Dạng_Thức]/[Chuỗi_Kí_tự_Thay_Thế]}

Tìm trong nội dung của [TÊN_BIẾN] tất cả các chuỗi kí tự nào tương hợp với [Dạng_Thức] và thay thế chúng bằng chuỗi kí tự  [Chuỗi_Kí_tự_Thay_Thế]. Nếu [Chuỗi_Kí_tự_Thay_Thế] không có mặt trong biểu thức thì những chuỗi con tìm thấy sẽ bị xóa (thay vì thay thế.)

Thí dụ

Thí dụ1:

 #Using wild card characters to strip off:
 $str=abcd-123-efg
 echo "${str#*-*}"     #result: 123-efg
 echo "${str##*-??}"   #result: gh
 echo "${str%%?-*}     #result: abc
 echo "${str%*-*}      #result: abcd-123

Thí dụ2:

 #change all filenames which have extension as ".text" 
 #to the filenames which have extension as ".txt" 
 for myfile in *.text        #see loop command session later 
 do 
     mv $myfile ${myfile%text}txt 
 done

Thí dụ3:

 #get substrings of str and its length 
 str="abcdefgh" 
 str1=${#str} #string length of str should be 9 
 str2=${str:2} #substring cdefgh 
 str3=${str:4:2} #substring ef  

Thí dụ4:

 #!/bin/bash
 # matching.sh

# Pattern matching using the # ## % %% parameter substitution operators.

var1=abcd12345abc6789 pattern1=a*c # * (wild card) matches everything between a - c.

echo echo "Number of characters in ${var1} = ${#var1}" echo.

echo "pattern1 = $pattern1" # a*c (everything between 'a' and 'c') echo "--------------" echo '${var1#$pattern1} =' "${var1#$pattern1}" # d12345abc6789 # Shortest possible match, strips out first 3 characters abcd12345abc6789.

echo '${var1##$pattern1} =' "${var1##$pattern1}" # 6789 # Longest possible match, strips out first 12 characters abcd12345abc6789.

echo; echo; echo.

pattern2=b*9 # everything between 'b' and '9' echo "var1 = $var1" # Still abcd12345abc6789 echo echo "pattern2 = $pattern2" echo "--------------" echo '${var1%pattern2} =' "${var1%$pattern2}" # abcd12345a # Shortest possible match, strips out last 6 characters abcd12345abc6789.

echo '${var1%%pattern2} =' "${var1%%$pattern2}" # a # Longest possible match, strips out last 12 characters abcd12345abc6789.

# Remember, # and ## work from the left end (beginning) of string, #  % and %% work from the right end.

echo

exit 0

Truy cập các đặc tính khác của biến

Một số lệnh khác liên quan đến sử dụng tên biến tưong đối có ích là

 ${#[TÊN_BIẾN]}

Trả về giá trị độ dài của dãy kí tự mà biến [TÊN_BIẾN] chứa

${![Tiền_Tố]*}

Trả về tên của tất cả các biến nào bắt đầu bằng [Tiền_Tố] Nếu có nhiều hơn một biến với cùng tiền tố thì chúng được hiển thị theo thứ tự trong bảng kí tự ASCII và ngăn cách nhau bởi kí tự trống

Lưu ý:  Các viết trên bắt buộc phải có dấu * đứng ngay sau [Tiền_Tố] và dấu này không thể thiếu hay thay thế bằng dấu ?. Trong trường hợp viết biểu thức trên dưới dạng không có dấu *
(tức là ${![Tiền_Tố]} ) thì BASH sẽ hiểu đây là cách dùng biến tham chiếu gián tiếp sẽ được đề cập trong bài tới )

Thí dụ

 my_var="value1"
 my_oldvar="value2"
 my_Exvar="value3"
 myvar="VALUE"
 echo "{!my_*}"   # the above command return: my_Exvar my_oldvar my_var
 echo "Content of \$myvar is: $myvar, and its length: ${#myvar}" 
 #the above command return: "Content of     $myvar is: VALUE, and its length: 5"  

Biểu thị nội dung string

Trong BASH nội dụng của một biến nếu không được định nghĩa chuyên biệt thì sẽ được hiểu là chuỗi kí tự tức là kiểu string. Đó đó, ngoài các cách thức truy cập nêu trong mục 5, 6. và 7, BASH còn hỗ trợ các phương thức khác nhau để biểu thị nội dung của một string:

Chuỗi kí tự với ngoặc kép "[string]"

Gần giống như C/C++ các chuỗi kí tự có thể được đặt trong ngoặc kép và có thể được "mở rộng" thông qua cách dùng các kí tự thoát (escape character)

Thí dụ:

 myName="Nguyen Van Hai"
 mySentence="My name is:  $myName"
 myParagraph="Hello! \n\t$mySentence\n"
 # display a varibale iside a string 
 echo "value of  \$mysentence is : $mySentence"
 #display a paragraph without enabling escape character feature
 echo "$myParagraph"
 #OK! correct it by using option -e
 echo -e  "$myParagraph"

Chuỗi kí tự với dấu sắc  '[string]'

Khác với dấu ngoặc kép các string lưu giữ dạng này sẽ không "mở rộng" các kí tự thoát trong mọi dạng

Thí dụ:

 myName="Nguyen Van Hai"
 # see how it is assigned
 myVar1='the value of  \$myName is:  $myName'
 myVar2="the value of  \$myName is:  $myName"
 #wait & see !
 echo $myVar1
 echo $myVar2
 #however
 echo "$myVar1"
 echo "$myVar2"
 #and the last test
 mySign='\$'
 echo "mySign is: $mySign"

Chuỗi kí tự với dấu huyền  `[Mệnh_Lệnh]` hay ngoặc đơn $([Mệnh_Lệnh])

BASH dùng cách này để cho phép gán nội dung hiển thị của một mệnh lệnh vào thành nội dung của một biến hay một biểu thức: Thí dụ1: Hai đọan mã sau đây tương đương dùng để xoá mọi tập tin thông thường (không phải là thư mục) trong thư mục hiện hoạt

Thí dụ1:

 for myFile in $(ls .); do
    rm -f $myFile
 done
 myDirContent=`ls .`
 echo "The content of current directory now:"
 echo "$myDirContent"
 for myFile in `$ls .`; do
    rm -f $myFile
 done
 myDirContent="$(ls .)"
 echo "The content of current directory now:"
 echo "$myDirContent"

Thí dụ2:

 myDir="./test"
 echo "content of ./test is: `ls $myDir`"

Sử dụng kí tự thoát

Kí tự thoát có thể dùng trong biểu thị nội dung của một string theo cả hai cách nêu trong 8.1 và 8.2 (xem thêm thí dụ trong 8.2). Sau đây là danh mục các kí tự thoát:

Kí tự thoát ANSI-C

  • \a Phát tiếng kêu "beep" hay nhấp nháy (Nếu Hệ điều hành hỗ trợ)
  • \b Kí tự bước lùi (backspace)
  • \f Kí tự "form feed"
  • \n Kí tự đầu dòng (newline)
  • \r Kí tự xuống hàng (carriage return)
  • \t Kí tự nhảy bước ngang (horizontal tab)
  • \v Kí tự nhảy bước dọc (vertical tab)
  • \\ Dấu nghiên về (backslash )
    Thí dụ:
 echo -e "the directory C:\\Windows\\Command" 
 #display string: 'the directory C:\Windows\Command' 
  • \' Dấu trích dẫn đơn (single quote)
  • \nnn Giá trị bát phân nnn được hiểu theo bảng đối chiếu ASCII
    Thí dụ:
 echo -e "\042" #display " sign 
  • \xHH Giá trị thập lục phân HH (Có thể viết 1 hay 2 số thập lục H)
  • \cx Kí tự "control-x"
  • \" Dấu "
  • \$ Dấu $
    Thí dụ:

  echo -e "I said: \"I love you!\", Mom. Can you give me \$10.00 ?"

Kí tự thoát hiển thị màu dùng cho lệnh echo  

Trong chế độ màn hình đầu cuối (console screen) và không phải là xterm hay các ngỏ ra từ X window thì các hiển thị từ lệnh echo có thể dùng các màu cho nền và cho chữ. Để làm việc này, người ta cần gọi thêm tham số -e (cho chế độ dùng kí tự thoát) và dùng cú pháp dạng

 echo -e $"\\033[[Loại];[Mã_Màu]m[Chuỗi_Hiển_Thị]" 

Trong đó, [Loại][Mã_Màu] được mô tả trong bảng sau:

Lưu ý: Màn hình sẽ không hiển thị đúng hay sẽ không hiển thị màu khi dùng các lệnh này trong xterm hay trong Xwindow

[loại] Ý nghiã
0 Chế độ mặc định thông thường
1 Tô đậm; chế độ sáng
5 Nhấp nháy
6 Nhấp nháy nhanh
7 Chế độ đảo ngược (màu nền -> màu mặt chữ và nguợc lại)


mã màu Ý nghiã
30 Chữ đen
31 Chữ đỏ
32 Chữ lục
33 Chữ vàng
34 Chữ xanh dương
35 Chữ tím
36 Chữ xanh da trời (cyan)
37 chữ trắng
40 Nền đen
41 Nền đỏ
42 Nền lục
43 Nền vàng
44 Nền xanh dương
45 Nền tím
46 Nền xanh da trời
47 Nền màu xám
 
 Thí dụ1: echo -e $"\\033[1;32mThe Green Text"
 Thí dụ2: echo -en $"\\033[5;31mFatal Error. Enter code to exit "
 read A     



Trở về mục lục

Đọc bài kế

Liên kết đến đây