Bash cho phép bạn ánh xạ toàn bộ chuỗi văn bản thành một biến đơn lẻ, đơn giản hóa việc sử dụng và viết script. Chúng hoạt động như thế nào và bạn có thể dùng chúng ra sao? Hãy tìm hiểu.
Biến Là Gì?
Biến là tên dễ nhớ có thể chứa các giá trị alphanumeric khác nhau. Chúng hữu ích vì cho phép áp dụng cùng một hàm cho các giá trị khác nhau, mà không cần viết lại script/đoạn code. Chúng cũng làm cho việc viết script/đoạn code dễ dàng hơn, vì thay vì xử lý các giá trị riêng lẻ, bạn có thể dùng cùng một tên cho tất cả chúng.
Biến Thời Gian Thực (Realtime Variables)
Bash cho phép sử dụng biến. Bạn có thể tạo biến ngay lập tức và tái sử dụng chúng trong phiên Bash hiện tại. Chúng có thể hỗ trợ việc sử dụng Bash của bạn theo nhiều cách khác nhau, và chúng sẽ biến mất sau khi phiên hiện tại kết thúc.
Ví dụ, giả sử bạn đang truy cập một loạt trang web. Bạn có thể đang research hoặc scrape dữ liệu. Bạn có thể tạo biến sau:
sitea=https://www.maketecheasier.com
Sau đó, nếu bạn muốn truy cập trang web của chúng tôi với Firefox, chỉ cần gõ:
firefox $sitea
Rất dễ dàng – và dễ đọc hơn. Biến $sitea sẽ giữ ánh xạ đến trang web cho đến khi bạn thay đổi nội dung của nó thủ công hoặc phiên Bash kết thúc. Và tất nhiên, bạn có thể tạo thêm biến, như siteb, sitec, và sited.
Khi thiết lập biến mới, bạn có thể dùng bất kỳ tên nào và lưu bất kỳ chuỗi alphanumeric nào bên trong. Tuy nhiên hãy nhớ rằng chúng phân biệt chữ hoa chữ thường (case-sensitive) mặc định. Do đó, $sitea sẽ không giống $SiteA. Ngoài ra, lưu ý bạn nên dùng dấu ngoặc kép khi lưu chuỗi có ký tự đặc biệt bên trong (kể cả dấu cách).
Biến Trong Script
Biến trong Bash hữu ích hơn khi viết script vì chúng cho phép bạn viết một script đơn lẻ, sau đó có thể lặp qua các chuỗi khác nhau hoặc tác động lên các mảnh dữ liệu tùy chỉnh. Giả sử bạn đang viết một script mà mọi người có thể dùng trên máy tính của họ, nhưng mỗi lần sẽ hiển thị lời chào cá nhân hóa. Không có biến, bạn phải viết phiên bản script khác cho mỗi user. Có biến, bạn giữ script giống nhau và chỉ thay đổi tên user.
Script như vậy sẽ trông giống như sau:
#!/bin/bash username=Odysseas echo $username
Ví dụ trên có vẻ thừa thãi; tuy nhiên, khi độ phức tạp của code tăng lên, biến trở nên không thể thiếu. Một script có thể dài hàng trăm hoặc hàng nghìn dòng và chứa tên user ở nhiều chỗ khác nhau. Để hiểu rõ hơn, hãy xem script hơi khác sau:
#!/bin/bash username=Linus echo Hello $username. This is a simple script I wrote that will repeat your name - that is, $username - often as an actual example of how to use Bash variables. I hope it will make it easier to understand how to use variables to improve your Bash workflow, $username. In this case, the variable username is mapped to your name. Whenever Bash runs into it, it replaces it with $username.
Script trên sẽ dùng tên được định nghĩa làm biến username để hoàn thành văn bản. Nếu dùng tên user thực tế, bạn phải gõ nó bốn lần. Sau đó, làm tương tự cho user tiếp theo, và lại bốn lần cho user sau. Lại và lại. Bằng cách gán nó cho một biến, bạn chỉ phải thay đổi nó một lần cho mỗi user, và mọi nhắc đến tên user trong văn bản sẽ được cập nhật.
Biến Bash Vĩnh Viễn và Aliases
Chúng ta đã thấy cách thiết lập biến tạm thời và cách, để có thứ gì đó vĩnh viễn hơn, bạn có thể đưa chúng vào script của mình. Nhưng có thể vĩnh viễn thiết lập biến trong Bash không? Câu trả lời là "có!" lớn và bạn chỉ phải sửa một file duy nhất: "~/.bashrc".
Mở file "~/.bashrc" trong text editor yêu thích. Vì tôi thích nano, tôi làm như sau:
nano ~/.bashrc
Chúng tôi đề xuất bạn bắt đầu với một test run, chỉ thêm một biến, để bạn biết nơi tìm nếu quá trình không thành công. Di chuyển đến cuối file và, ở dòng mới, thêm biến của bạn. Ví dụ, tôi đặt biến cho tên của tôi là:
myname="Odysseas Kourafalos"
Lưu file và thoát editor. Những thay đổi sẽ không được áp dụng ngay lập tức. Nhập sau đây vào terminal để có hiệu lực:
source ~/.bashrc
Bây giờ bạn có thể dùng biến mới thiết lập trong phiên Bash của bạn:
echo $myname
Bạn có thể thiết lập bao nhiêu biến tùy thích và đơn giản hóa rất nhiều cuộc phiêu lưu hàng ngày trong Bash.
Để tăng thêm năng suất, cũng đáng để thiết lập một loại biến khác: aliases. Khác với biến thông thường, ánh xạ đến dữ liệu bạn có thể dùng trong lệnh, aliases được dùng thay cho lệnh thực tế.
Cũng như bạn có thể dùng biến dễ nhớ để giữ chuỗi văn bản dài, bạn có thể dùng aliases như sự thay thế dễ dàng cho các lệnh phức tạp. Bạn có thể tìm hiểu thêm về chúng ở đây, nơi chúng ta biến toàn bộ lệnh nén 7zip thành alias hai ký tự.
Lưu ý cuối cùng, ngay cả khi bạn đã vĩnh viễn thiết lập một biến trong .bashrc, bạn có thể gán lại giá trị khác cho nó tạm thời, như chúng ta đã thấy trước đó. Biến sẽ trình bày nội dung mới cho đến khi phiên Bash hiện tại kết thúc (sau khi logout hoặc restart) hoặc bạn re-source file .bashrc.