Linux căn bản - Bài 13: Scripting - kịch bản

Đây là bài 13 trong loạt bài “Linux căn bản”. Các bạn nên ghé qua nó một chút trước khi bắt đầu.

Bài viết sẽ còn được cập nhật …

Giới thiệu

Nó là cái gì?

Mọi thứ bạn có thể chạy bằng dòng lệnh bạn cũng có thể đặt nó trong file script và chúng sẽ hoạt động giống như nhau. Ngược lại, mọi thứ bạn có thể để trong script, bạn cũng có thể chạy trên dòng lệnh và chúng được thực thi giống như nhau

Một ví dụ đơn giản

Những điểm Quan trọng

Shebang Unix(#!)

Dòng đầu tiên của một script phải thông báo với hệ thống trình biên dịch nào sẽ được sử dụng cho file này. Điều quan trọng, đây là dòng đầu tiên của script. Quan trọng không kém là không có những khoảng trống. Hai kí tự đầu tiên #! (shebang) nói với hệ thống trực tiếp một cách trực tiếp rằng, sau nó sẽ là đường dẫn tới trình thông dịch được sử dụng. Nếu chúng ta không biết trình thông dịch nằm ở đâu chúng ta có thể sử dụng lệnh which để tìm nó

Cú pháp:

which <program>

Ví dụ:

root@orangepi3:~# which bash
/bin/bash

Tên

Linux là một hệ thống không có phần mở rộng (đuôi mở rộng). Nghĩa là chúng ta có thể gọi script theo bất kì cái gì chúng ta thích và nó sẽ không ảnh hưởng đến việc chạy nó theo cách nào đó. Thông thường chúng ta đặt phần mở rộng là .sh vào những script, điều này đơn thuần là để tiện lợi và không được yêu cầu. Chúng ta có thể đặt tên script ở trên đơn giản là script-cua-toi hoặc thậm chí là script.jpg và nó vẫn sẽ chạy tốt.

Chú thích

A comment is just a note in the script that does not get run, it is merely there for your benefit. Comments are easy to put in, all you need to do is place a hash ( # ) then anything after that is considered a comment. A comment can be a whole line or at the end of a line.

Tại sao lại là ./ ?

Linux được thiết lập theo cách mà nó vốn dĩ như vậy, rộng hơn là vì vì những lý do logic. Nét riêng biệt này thực ra làm hệ thống an toàn hơn cho chúng ta. Đầu tiên là một chút kiến thức nền tảng. Khi chúng ta gõ một lệnh vào dòng lệnh, hệ thống sẽ duyệt qua một chuỗi thư mục được định trước, tìm kiếm chương trình chúng ta chỉ định. Chúng ta có thể tìm thấy những thư mục bằng cách tìm biến cụ thể PATH (chúng ta sẽ nói thêm về điều này sau)

Hệ thống sẽ xem trong thư mục đầu tiên và nếu nó tìm thấy chương trình nó sẽ chạy nó, nếu không nó sẽ kiểm tra thư mục thứ 2 và cứ như vậy. Những thư mục được phân cách bởi một dấu ( : ).

Hệ thống sẽ không tìm trong bất kì thư mục nào ngoài những thư mục này, nó thậm chí sẽ không tìm trong thư mục hiện hành của bạn. Tuy nhiên chúng ta có thể ghi đè hành vi này bằng cách cung cấp một đường dẫn. Khi chúng ta làm như vậy hệ thống nói một cách hiệu quả rằng “À, mầy nói với tao vào thư mục nào để tìm script đó vì vậy tao sẽ bỏ quả đường dẫn PATH và thay vào đó đi thẳng đến vị trí mà mầy đã chỉ định”. Bạn vẫn còn nhớ ở Bài 2: Định Vị Căn Bản rằng một dấu chấm ( . ) đại diện cho thư mục hiện hành, vì vậy khi chúng ta nói ./script.sh là chúng ta đang thực sự nói với hệ thống vào thư mục hiện hành để tìm script. Chúng ta cũng có thể sử dụng đường dẫn tuyệt đối ( /home/ryan/linuxtutorialwork/myscript.sh ) và nó sẽ làm việc giống nhau một cách chính xác, hoặc đường dẫn tương đối nếu chúng ta không để script trong thư mục hiện hành ( ../linuxtutorialwork/myscript.sh ).

Phân Quyền (Permissions)

Một script phải có quyền thực thi trước khi chúng ta có thể chạy nó (thậm chí chúng ta là chủ của file). Vì lý do an toàn,mặc định bạn không có quyền thực thi vì vậy bạn phải thêm nó. Một lệnh tốt để chạy đảm bảo sript là thiết lập đúng chmod 755 cho <script>.

Biến (Variables)

Một biến là cái thùng chứa (container) cho một mảnh dữ liệu đơn giản. Chúng hữu ích nếu chúng ta cần làm việc với một thứ riêng biệt và sử dụng chúng sau này. Biến dễ dàng thiết lập và tham chiếu nhưng chusg có cú pháp đặc biệt mà phải tuân theo một cách chính xác để cho chúng làm việc

- Khi chúng ta cài đặt một biến, chúng ta chỉ ra tên biên, theo sau là một dấu bằng ( = ), tiếp theo là giá trị của biến. (Vì vậy, không có khoảng trắng giữa 2 bên của dấu bằng `=`)
- Khi chúng ta tham chiếu đến biến, chúng ta phải đặt kí hiệu dollar ( $ ) trước tên biến.

Command line arguments and More

Back ticks

A Sample Backup Script

Câu lệnh If (If Statements)

Scrip sao lưu ở trên làm cho cuộc đời bạn dễ dàng hơn chút xíu, nhưng tôi phải làm sao nếu có lỗi. Script có thể rơi vào mớ hỗ độn với những thông báo lỗi. Ở ví dụ bên dưới tôi sẽ giới thiệu câu lệnh if. Tôi chỉ đụng đến chúng một cách tổng quan. Bạn nên làm việc cách sử dụng chúng tư những ví dụ và ghi chú bên dưới. Nếu bạn muốn biết thêm về nó thì ghé phần bài học Bash Scripting, ở đó sẽ đi qua nhiều chi tiết hơn.

(If this all seems too confusing, don’t worry too much. Even with just the knowledge above you can still write quite useful and practical scripts to make your life easier.)

Tóm lại

Những điều chúng ta đã học

#!: Shebang. Indicates which interpreter a script should be run with.

Dịch và giản lược theo

https://ryanstutorials.net/linuxtutorial/scripting.php | Mirror

Gỡ rối script

https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script