Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Phân Tích Hiệu Quả File Cấu Hình Trong Bash Cho Cập Nhật Dễ Dàng Bởi Non-Programmer

Giữ cấu hình chương trình tách biệt khỏi mã là quan trọng. Nó cho phép non-programmer thay đổi cấu hình mà không cần sửa mã chương trình. Với file thực thi binary đã biên dịch, điều đó sẽ không thể cho non-programmer vì nó không chỉ yêu cầu truy cập file nguồn (chúng ta có với chương trình open source) mà còn bộ kỹ năng lập trình viên. Ít người có đó, và hầu hết không muốn học.

Với ngôn ngữ shell như Bash, truy cập mã nguồn có sẵn theo định nghĩa vì script shell không được biên dịch thành định dạng binary. Dù có sự mở đó, đây không phải ý tưởng tốt cho non-programmer lội quanh trong script shell và sửa chúng. ngay cả developer và sysadmin am hiểu cũng có thể làm thay đổi ngẫu nhiên gây lỗi hoặc tệ hơn.

Vì vậy đặt mục cấu hình vào tệp văn bản dễ bảo trì cung cấp sự tách biệt và cho phép non-programmer chỉnh sửa phần tử cấu hình mà không nguy hiểm làm thay đổi vô tình mã. Nhiều developer làm điều này cho chương trình viết bằng ngôn ngữ biên dịch vì họ không mong đợi người dùng là developer. Với nhiều lý do giống nhau, điều này cũng hợp lý cho ngôn ngữ shell thông dịch.

Cách Thông Thường

Giống nhiều ngôn ngữ khác, bạn có thể viết mã cho chương trình Bash đọc và phân tích tệp cấu hình văn bản ASCII, đọc tên biến, và đặt giá trị khi mã chương trình thực thi. Ví dụ, tệp cấu hình có thể trông như sau:

var1=LinuxGeek46
var2=Opensource.com

Chương trình sẽ đọc tệp đó, phân tích từng dòng, và đặt giá trị vào từng biến.

Sourcing (Nạp/Nguồn)

Bash dùng phương pháp dễ dàng hơn nhiều để phân tích và đặt biến gọi là sourcing. Sourcing tệp bên ngoài từ chương trình shell thực thi là phương pháp đơn giản để bao gồm nội dung của tệp đó vào chương trình shell hoàn toàn. Ở một khía cạnh, điều này rất giống câu lệnh include ngôn ngữ biên dịch bao gồm tệp thư viện tại runtime. Tệp như vậy có thể bao gồm bất kỳ loại mã Bash nào, bao gồm gán biến.

Như thường lệ, dễ demo hơn giải thích.

Đầu tiên, tạo thư mục ~/bin (nếu chưa tồn tại), và làm nó thư mục làm việc hiện tại (PWD). Tiêu chuẩn Phân Cấp Hệ Thống Tệp Linux định nghĩa ~/bin là nơi thích hợp để người dùng lưu trữ tệp thực thi của họ.

Tạo tệp mới trong thư mục này. Đặt tên main và làm cho nó thực thi:

[dboth@david bin]$ touch main
[dboth@david bin]$ chmod +x main
[dboth@david bin]$

Thêm nội dung sau vào tệp thực thi này:

#!/bin/bash
Name="LinuxGeek"
echo $Name

Và thực thi chương trình Bash này:

[dboth@david bin]$ ./main
LinuxGeek
[dboth@david bin]$

Tạo tệp mới và gọi nó ~/bin/data. Tệp này không cần thực thi. Thêm thông tin sau vào nó:

# Sourced code and variables
echo "This is the sourced code from the data file."
FirstName="David"
LastName="Both"

Thêm ba dòng vào chương trình main để nó trông như sau:

#!/bin/bash
Name="LinuxGeek"
echo $Name
source ~/bin/data
echo "First name: $FirstName"
echo "LastName: $LastName"

Chạy lại chương trình:

[dboth@david bin]$ ./main
LinuxGeek
This is the sourced code from the data file.
First name: David
LastName: Both
[dboth@david bin]$

Còn một điều rất hay về sourcing. Bạn có thể dùng một dấu chấm đơn (.) làm lối tắt cho lệnh source. Thay đổi tệp main để thay . cho source:

#!/bin/bash
Name="LinuxGeek"
echo $Name
. ~/bin/data
echo "First name: $FirstName"
echo "LastName: $LastName"

Và chạy chương trình lại. Kết quả nên đúng y hệt lần chạy trước.

Khởi Động Bash

Mọi host Linux dùng Bash – khá nhiều vì Bash là shell mặc định cho tất cả bản phân phối – bao gồm một số ví dụ tuyệt vời, tích hợp sẵn của sourcing.

Khi một shell Bash khởi động, môi trường của nó phải được cấu hình để có thể dùng. Có năm tệp chính và một thư mục được dùng để cấu hình môi trường Bash. Chúng được liệt kê ở đây cùng chức năng chính:

  • /etc/profile: Môi trường toàn hệ thống và chương trình khởi động
  • /etc/bashrc: Hàm và alias toàn hệ thống
  • /etc/profile.d/: Thư mục chứa script toàn hệ thống để cấu hình các công cụ dòng lệnh như vim và mc và bất kỳ script cấu hình tùy chỉnh nào sysadmin tạo
  • ~/.bash_profile: Môi trường và chương trình khởi động riêng user
  • ~/.bashrc: Alias và hàm riêng user
  • ~/.bash_logout: Lệnh riêng user thực thi khi logout

Hãy thử theo dõi trình tự thực thi qua các tệp này và xác định trình tự nào dùng cho khởi động Bash non-login so với login Bash. Tôi làm điều này trong Chương 17 của Volume 1 trong loạt đào tạo Linux của tôi, Using and administering Linux: Zero to sysadmin.

Tôi cho bạn một gợi ý. Tất cả bắt đầu với script ~/.bashrc.

Kết Luận

Bài viết này khám phá sourcing để kéo mã và gán biến vào chương trình Bash. Phương pháp phân tích biến từ tệp cấu hình này nhanh, dễ, và linh hoạt. Nó cung cấp phương pháp tách mã Bash khỏi gán biến để cho phép non-programmer đặt giá trị cho những biến đó.