Skip to content

Kiến thức cơ bản về Shell Scripts#

1. Script là gì?#

Script là mã kịch bản, là bản thảo viết theo ngôn ngữ máy tính.

Là một loại chương trình của máy tính, sẽ tự động hóa hoặc lược bỏ quy trình tạo file có khả năng chạy hoặc biến đổi đến ngôn ngữ máy tính. Script là chương trình mà có thể chạy ngay khi bạn viết source code. Ngôn ngữ script chính là ngôn ngữ lập trình mà có thể chạy chương trình trên.

2. Shell script là gì?#

Shell là chương trình giao tiếp với người dùng, chấp nhận các lệnh từ bạn (keyboard) và thực thi chúng. Nếu bạn muốn sử dụng nhiều lệnh chỉ bằng một lệnh, bạn có thể lưu chuỗi lệnh vào file văn bản và bảo shell thực thi file này thay vì nhập từng lệnh. Điều này được gọi là shell script.

Shell script có thể nhận input từ người dùng, file hoặc output từ màn hình và rất tiện lợi để tạo nhóm lệnh riêng, giúp tiết kiệm thời gian và tự động hóa một số công việc thường xuyên.

3. 'Hello world' script.#

Viết script helloworld đơn giản và thiết lập quyền thực thi cho nó bằng lệnh chmod +x helloworld. Sau đó gõ đường dẫn tới file script để thực thi.

#!/bin/bash
echo hello world

4. She-bang#

She-bang là hai ký tự #! ở đầu một script để thông báo cho shell biết phải chạy script với shell nào (ví dụ: bash shell).

  • Bash shell: #!/bin/bash
  • Korn shell: #!/bin/ksh

5. Chạy script với source#

Khi chạy một script, nó sẽ chạy trong một shell con. Nếu muốn chạy script trong shell hiện tại, bạn có thể dùng lệnh source.

6. test []#

Lệnh test kiểm tra tính đúng hoặc sai của một điều kiện bằng cách trả về mã 0 hoặc 1. Có thể kết hợp test với &&|| để đưa ra kết quả true hoặc false.

Câu lệnh test cũng có thể thay thế bằng [ ]:

Một số tùy chọn của test:

  • [ -d foo ]: Thư mục foo có tồn tại không?
  • [ -e bar ]: File bar có tồn tại không?
  • [ '/etc' = $PWD ]: Chuỗi /etc có bằng biến PWD không?
  • [ $1 != 'secret' ]: Tham số đầu tiên có khác 'secret' không?
  • [ 55 -lt $bar ]: 55 có nhỏ hơn giá trị của $bar không?
  • [ $foo -ge 1000 ]: Giá trị của $foo có lớn hơn hoặc bằng 1000 không?
  • [ "abc" < $bar ]: Chuỗi "abc" có đứng trước giá trị của $bar không?
  • [ -f foo ]: foo có phải là file thông thường không?
  • [ -r bar ]: bar có phải là file có thể đọc không?
  • [ foo -nt bar ]: File foo có mới hơn file bar không?
  • [ -o nounset ]: Tùy chọn shell nounset có được thiết lập không?

7. if then else#

Cấu trúc if then else giúp thực thi các lệnh tùy theo điều kiện. Ví dụ sau kiểm tra xem file "abc" có tồn tại hay không và in ra kết quả:

Bạn cũng có thể sử dụng elif để đặt điều kiện tiếp theo nếu điều kiện trước không thỏa mãn.

8. Vòng lặp#

Ví dụ về vòng lặp for trong bash:

Ngoài for, còn có thể sử dụng các vòng lặp khác như whileuntil.

Tài liệu học nâng cao#

bash.cyberciti.biz

9. Viết script kiểm tra và cài đặt package trên hệ thống#

Yêu cầu: Cho danh sách các package wget, curl, mtr, httpd. Viết bash script kiểm tra các package đã được cài đặt trên hệ thống hay chưa và cài đặt những package chưa được cài đặt.

  • Tạo và chỉnh sửa file script với lệnh vi install-package.sh
#!/bin/bash
# Chạy script trên CentOS 7 và dưới quyền user root

# Khai báo mảng chứa các package để kiểm tra và cài đặt:
package_array=(wget curl httpd mtr)

# Dùng vòng lặp for để xử lý từng phần tử trong mảng. 
for package in "${package_array[@]}"
do 
    echo "Kiểm tra $package trên hệ thống"
    sleep 2
    if rpm -q $package       # Kiểm tra package đã được cài chưa  
    then 
        echo "$package đã được cài đặt"
    else 
        echo "$package chưa được cài đặt"
        sleep 1
        echo "Tiến hành cài đặt $package"
        yum install -y $package
    fi 
    echo ========================================
done

echo "End of Script"
  • Thiết lập quyền thực thi cho script: chmod +x install-package.sh