4 Làm quen với hệ thống tập tin ext3fs
5.6.2 Dấu nhắc của hệ vỏ
Một trong các biến rất quan trọng có tên PS1. Biến này cho biết dạng của dấu nhắc, mà bash đưa ra trong khi chờ người dùng nhập câu lệnh tiếp theo. Theo mặc định thì biến này được gán giá trị “\s-\v\$ ”, tuy nhiên trên các bản phân phối khác nhau thường có các script khởi động (hay script đăng nhập) xác định lại biến này. Nói chung thì trong bash có tất cả bốn dấu nhắc, được sử dụng trong các trường hợp khác nhau. Biến PS1 đưa ra dạng của dấu nhắc khi hệ vỏ chờ nhập lệnh. Dấu nhắc thứ hai, xác định bởi biến PS2, xuất hiện khi hệ vỏ chờ người dùng nhập thêm một vài dữ liệu cần thiết nào đó để có thể tiếp tục chạy câu lệnh (chương trình) đã gọi. Theo mặc định biến PS2 có giá trị “>”. Rất có thể bạn đã nhìn thấy dấu nhắc này, khi chạy lệnh cat để đưa dữ liệu vào từ bàn phím vào tập tin. Một ví dụ khác - lệnh ftp, sau khi chạy lệnh này dấu nhắc sẽ có dạng như đã nói. Dấu nhắc, xác định bởi biến PS3, sử dụng trong lệnh
select. Dấu nhắc, xác định bởi biến PS4, được đưa ra trước mỗi câu lệnh, trong lúcbashtheo dõi quá trình thực hiện. Giá trị theo mặc định - “+”. Nếu có mong muốn, bạn có thể thay đổi các biến PS1 và PS2. Khi này có thể sử dụng bất kỳ ký tự nào nhập từ bàn phím, cũng như một vài ký tự chuyên dùng để xác định dạng dấu nhắc như trong bảng 5.3(chỉ đưa ra một vài trong số chúng làm ví dụ, danh sách đầy đủ xem trong trang man của bash- gõ lệnh “man bash”).
Số của lệnh (số thứ tự của lệnh đang thực hiện trong buổi làm việc hiện thời) có thể khác với số của chính nó trong danh sách “lịch sử các câu lệnh”, bởi vì danh sách còn chứa cả những câu lệnh đã được ghi lại trong tập tin lịch sử. Sau
5.6 Tham biến và các biến số. Môi trường của hệ vỏ 111
Bảng 5.3: Ký tự xác định dạng dấu nhắc
Cụm ký tự Giá trị(kết quả thu được)
\a Tín hiệu âm thanh (mã ASCII 07)
\d Thời gian ở dạng “Thứ, tháng, ngày”, ví dụ, Sun, Dec, 26. \h Tên máy (hostname) đến dấu chấm đầu tiên.
\H Tên máy đầy đủ, ví dụ teppi.phanthinh.com
\t Thời gian hiện thời ở dạng 24 giờ: HH:MM:SS (giờ:phút:giây) \T Thời gian hiện thời ở dạng 12 giờ: HH:MM:SS
\@ Thời gian hiện thời ở dạng 12 giờ am/pm (sáng/chiều) \u Tên người dùng đã chạy hệ vỏ, ví dụ teppi
\w Tên đầy đủ của thư mục làm việc hiện thời (bắt đầu từ gốc), ví dụ /home/teppi82/project/l4u
\W Thư mục hiện thời (không có đường dẫn)
\$ Ký tự #, nếu hệ vỏ được chạy bởi người dùng root, và ký tự $, nếu hệ vỏ được chạy bởi người dùng thường.
\nnn Ký tự có mã hệ tám nnn \n Dòng mới (chuyển dòng) \s Tên hệ vỏ
\# Số hiện thời của câu lệnh \\ Dấu gạch ngược (backslash)
\[ Sau ký tự này tất cả các ký tự sẽ không được in ra. \] Kết thúc chuỗi các ký tự không được in ra.
\! Số thứ tự của lệnh hiện thời trong lịch sử các câu lệnh đã dùng.
khi giá trị của biến được hệ vỏ đọc xong, sẽ xảy ra sự thay thế theo các quy luật mở rộng trong bảng trên, đồng thời còn xảy ra sự thay thế trong tên các câu lệnh, trong các biểu thức số học, và sự chia từ (word splitting). Chúng ta sẽ nói đến những sự thay thế này ở dưới.Ví dụ, sau khi thực hiện lệnh (vì trong dòng văn bản có khoảng trống, nên nhất thiết phải có dấu ngoặc):
[user/root]$ PS1="[\u@\h \W]\$"
thì trong dấu nhắc sẽ có dấu mở ngoặc vuông, tên người dùng, ký hiệu , tên máy, khoảng trắng, tên của thư mục hiện thời (không có đường dẫn), dấu đóng ngoặc vuông, và ký hiệu $ (nếu trên hệ vỏ đang làm việc người dùng bình thường) hay #(nếu hệ vỏ chạy dưới người dùng root).