Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Cái nhìn sâu sắc về "Biến" Linux trong ngôn ngữ kịch bản Shell - Phần 9

Chúng tôi đã viết một loạt bài về Linux Shell Scripting được chào đón nồng nhiệt vào thời điểm đó và nó vẫn còn phù hợp ngay cả bây giờ. Đây là liên kết đến bộ sưu tập các bài viết về shell scripting.

  1. Tìm hiểu Linux Shell Scripting

Ở đây trong bài viết này, chúng ta sẽ thấy các biến , việc thực thi và triển khai nó trong tập lệnh shell.

Cái nhìn sâu sắc về  Biến  Linux trong ngôn ngữ kịch bản Shell - Phần 9

Lưu đầu ra

Đầu ra của một lệnh có thể được chuyển hướng đến đầu ra tiêu chuẩn hoặc một tệp và cũng có thể được lưu trữ trong một biến. Nếu đầu ra của một lệnh đủ lớn để nó không vừa với màn hình, chúng ta chỉ còn tùy chọn lưu đầu ra vào một tệp trong một biến. Một ưu điểm của việc lưu đầu ra thành biến là tốc độ kiểm tra nhanh hơn. Các biến được lưu vào bộ nhớ và do đó nó có xu hướng nhanh hơn so với việc truy xuất từ ​​tệp.

Các biến trong ngôn ngữ kịch bản

Các biến là một thành phần quan trọng được sử dụng trong kịch bản Shell và được khai báo bằng lệnh bash “ Khai báo ”. Để khai báo một biến, hãy nói ‘ level ‘, Chúng ta cần thực hiện lệnh dưới đây.

$ declare LEVEL

Lưu ý :Chúng tôi cần sử dụng “ typecast ”, Một tuyên bố tích hợp cho khả năng tương thích của trình bao korn. "Tuyên bố" nâng cao hơn và chứa tất cả các tính năng, do đó được khuyến nghị khi sử dụng BASH.

Quy tắc
  1. Tên biến phải phù hợp với việc sử dụng biến trong tập lệnh.
  2. Chúng tôi khuyên bạn nên sử dụng cùng một tên biến trong suốt chương trình.
  3. Tên biến có thể là chữ hoa cũng như chữ thường nhưng theo quy ước, các lệnh shell là chữ thường và do đó chúng ta nên sử dụng tên biến ở dạng chữ hoa để loại bỏ bất kỳ sự nhầm lẫn nào. ví dụ:TOTAL_BILLED_AMOUNT, SELL_REPORT, ORDER_RECEIPT, v.v.

Thực hiện

Một biến có thể được gán giá trị bằng dấu bằng ( = ). Để gán một chuỗi trống cho một biến, chúng ta không được cung cấp bất kỳ giá trị nào sau dấu bằng.

$ LEVEL =

Kiểm tra giá trị được lưu trữ trong biến ‘LEVEL’ là.

$ printf "%i" $LEVEL

printf , hầu hết lệnh của ‘ C ‘Lập trình viên biết, in dữ liệu. % i - Đại diện cho số nguyên. Chúng tôi có thể thay thế nó bằng % c cho Ký tự hoặc % c cho chuỗi, như và khi được yêu cầu.

$ LEVEL:Lưu ý ‘ $ ‘Hoạt động như một máy tính thay thế giá trị cho biến‘ LEVEL ’ .

Đầu ra mẫu
$ printf "%i" $LEVEL
0

Gán giá trị cho biến.

$ LEVEL=0

Kiểm tra dữ liệu được lưu trữ trong biến.

$ printf "%i" $LEVEL
0

LƯU Ý :Điều thú vị cần lưu ý là trong cả hai trường hợp, khi chúng tôi không chỉ định giá trị cho biến và khi chúng tôi chỉ định giá trị ‘ 0 ‘Thành biến‘ LEVEL ‘Đầu ra 0 . Mặc dù kết quả đầu ra giống nhau trong cả hai trường hợp nhưng shell script xử lý cả khai báo biến khác nhau.

Gán một giá trị mới cho biến.

$ LEVEL=121

Kiểm tra dữ liệu được lưu trữ trong biến.

$ printf "%i" $LEVEL
121

Bỏ đặt một biến

Khai báo là một lệnh BASH và nó chỉ tạo biến khi được thực thi. Biến được tạo vẫn còn trong bộ nhớ cho đến khi tập lệnh dừng hoặc biến bị hủy.

$ unset LEVEL

Các biến được xác định trước bằng BASH

BASH có hơn 50 các biến được xác định trước. Một số biến trong số này có ý nghĩa đặc biệt gắn với BASH, ví dụ:một biến NGẪU NHIÊN xuất ra một số ngẫu nhiên. Nếu nó không được đặt và sau đó được xác định lại, giá trị biến ban đầu sẽ bị mất vĩnh viễn. Do đó, không nên sử dụng bất kỳ biến nào do hệ thống xác định.

Đây là danh sách một số biến BASH hữu ích.

  1. BASH — Tên đường dẫn đầy đủ của Bash.
  2. BASH_ENV — Trong tập lệnh shell, tên của tệp hồ sơ được thực thi trước khi bắt đầu tập lệnh.
  3. BASH_VERSION — Phiên bản của Bash (ví dụ:2.04.0 (1) -release).
  4. CỘT — Số ký tự trên mỗi dòng trên màn hình của bạn (ví dụ:80).
  5. HOSTNAME — Tên của máy tính. Trong một số phiên bản của Linux, đây có thể là tên máy. Đối với những người khác, nó có thể là một tên miền hoàn toàn đủ điều kiện.
  6. HOSTTYPE — Loại máy tính.
  7. HOME — Tên thư mục chính của bạn.
  8. OSTYPE — Tên của hệ điều hành.
  9. PATH — Danh sách các đường dẫn tìm kiếm được phân tách bằng dấu hai chấm để tìm một lệnh để thực thi.
  10. PPID — ID quy trình của quy trình mẹ của trình bao.
  11. PROMPT_COMMAND — Lệnh thực thi trước khi thiết lập chuỗi lời nhắc chính PS1.
  12. PWD — Thư mục làm việc hiện tại (như được đặt bởi lệnh cd).
  13. RANDOM — Trả về một số ngẫu nhiên từ 0 đến 32767 mỗi khi nó được tham chiếu.
  14. SHELL — Lớp vỏ được ưu tiên sử dụng; đối với các chương trình khởi đầu cho bạn.
  15. TERM — Loại mô phỏng đầu cuối (ví dụ:bảng điều khiển).

Quy tắc tách từ.

$ LEVEL=0
$ printf "%i" $LEVEL
0

AND

$ LEVEL=”0”
$ printf "%i" $LEVEL
0

Trong cả hai trường hợp, sản lượng vẫn như nhau. Vậy sự khác biệt trong kết quả khi sử dụng dấu ngoặc kép là gì?

Hãy kiểm tra giống nhau với các dữ liệu biến khác nhau.

$ LEVEL=0 ; 1 ; 2 ; 3 ; 4 ; 5
bash: 1: command not found 
bash: 2: command not found 
bash: 3: command not found 
bash: 4: command not found 
bash: 5: command not found
$ printf "%i" $LEVEL
0

Chưa kể, đầu ra không đúng. BASH đang chiếm khoảng trống sau ‘ 0 ‘Là điểm kết thúc và do đó giá trị của biến được đặt là‘ 0 ‘. Bây giờ chúng tôi cố gắng sử dụng dấu ngoặc kép cho các biến như bên dưới.

$ LEVEL=”0 ; 1 ; 2 ; 3 ; 4 ; 5”
$ printf "%s" $LEVEL 
0;1;2;3;4;5

Vẫn là kết quả không đúng. BASH lấy các giá trị biến và loại bỏ tất cả các khoảng trắng ở giữa chúng. Do đó printf đã không hiểu 0,1,2,3,4,5 là các giá trị riêng biệt. Vậy giải pháp là gì?

printf "%s" "$LEVEL" 
0 ; 1 ; 2 ; 3 ; 4 ; 5

Ừ! Đặt thay thế Biến dưới dấu ngoặc kép là giải pháp. Trích dẫn nhóm các ký tự trong shell và giải thích các ký tự đặc biệt theo cách có ý nghĩa.

Các câu trích dẫn có thể được sử dụng liên tục và tốt hơn hết là bạn nên kèm theo các câu thay thế có thể thay thế bằng dấu ngoặc kép. Hơn nữa, nó có thể được sử dụng để tách văn bản tổng thể khỏi trích dẫn. Đây là một ví dụ.

$ LEVEL=5 
$ FLAG_MESSAGE="I HAVE CLEARED LEVEL""$LEVEL"". I Deserve appreciation." 
$ printf “%s” “$FLAG_MESSAGE”
“I HAVE CLEARED LEVEL5. I Deserve appreciation.”

Việc tách các phần văn bản được trích dẫn bằng dấu cách sẽ dẫn đến vấn đề tương tự như đã thảo luận ở trên. Bash sẽ coi khoảng trắng là điểm kết thúc. Một cách thay thế biến khác là.

$ LEVEL=5

$ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

$ printf “%s” "$FLAG_MESSAGE" 
“I HAVE CLEARED LEVEL 5. I Deserve appreciation.”

Dấu ngoặc kép hạn chế BASH in các ký tự Đặc biệt.

$ printf “%s” '$FLAG_MESSAGE'
“$FLAG_MESSAGE”

Dấu gạch chéo ngược (/)

Dấu gạch chéo ngược hoạt động giống như một dấu ngoặc kép cho một ký tự. Bạn đã nghĩ mình sẽ in như thế nào chưa ( )?

$ printf "%c" "\""

Khi % q được nhóm với printf , cung cấp dấu gạch chéo ngược sau mỗi từ để đảm bảo khoảng cách giữa các từ.

$ LEVEL=5

$ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

$ printf “%q” "$FLAG_MESSAGE" 
“I\ HAVE\ CLEARED\ LEVEL\ 5.\ I\ Deserve\ appreciation.”

Đó là tất cả cho bây giờ. Chúng tôi luôn cố gắng cung cấp cho độc giả những bài viết hữu ích cho họ mọi lúc, mọi nơi. Bài viết được đề cập ở trên là rất lớn, do đó phần còn lại của các chủ đề với các ví dụ sẽ được đưa ra trong bài viết tiếp theo sẽ bao gồm 'Thuộc tính của biến', 'Xuất biến', v.v.

Đến lúc đó Hãy theo dõi và kết nối với Tecmint.com . Đừng quên cung cấp cho chúng tôi những phản hồi có giá trị của bạn trong phần bình luận bên dưới.