Bỏ qua nội dung

Ngày 19 - Tự động hóa với Bash Shell

Ngày thứ 19. Chúng ta tiếp tục với hành trình 90 ngày DevOps với câu chuyện mà chúng ta đã từng nhắc đến ở giai đoạn đầu: Tự động hóa. Để tự động hóa được tốt hơn, trong DevOps người ta thường sử dụng Bash (Bourne Again Shell). Tất nhiên chúng ta cũng có một lựa chọn khác là ZSH sẽ được nhắc đến trong những phần tiếp theo.

Khởi đầu

Chúng ta tạo một tập tin Bash Shell đơn giản bằng touch 90DaysOfDevOps.sh. Sau đó, chỉnh sửa bằng nano 90DaysOfDevOps.sh. Dưới đây là nội dung tập tin Bash Shell.

90DaysOfDevOps.sh
#!/bin/bash
mkdir 90DaysOfDevOps
cd 90DaysOfDevOps
touch Day19
ls

Dòng đầu tiên định hình vị trí của Shell mà chúng ta sử dụng, tất nhiên nó có thể có những biến thể như thế này.

  • #!/usr/bin/env bash
  • #!/usr/bin/bash

Để biết chắc chắn Bash đang ở đâu, hãy sử dụng một trong hai câu lệnh: which bash hoặc whereis bash.

Lưu tập tin. Kiểm tra quyền hạn của tập tin này bằng lệnh ls -la. Sau đó thay đổi để cấp quyền thực thi bằng câu lệnh quen thuộc: chmod +x 90DaysOfDevOps.sh. Chạy tập tin này lên, và đây là kết quả.

bash run

Thay đổi một chút…

Trên tập tin chúng ta có thể có những trường thông tin sau để chúng ta tìm hiểu.

Biến

Cách dùng có thể là khai báo trực tiếp rồi gọi bằng $[name]. Hoặc có thể sử dụng cách sau để cho người dùng nhập giá trị vào.

Entering variables
echo "Write your name: "
read name

Điều kiện

90DaysOfDevOps.sh
#!/bin/bash
# ___ ___ ____ ___ __ ____ ___
# / _ \ / _ \| _ \ __ _ _ _ ___ / _ \ / _| _ \ _____ __/ _ \ _ __ ___
#| (_) | | | | | | |/ _` | | | / __| | | | |_| | | |/ _ \ \ / / | | | '_ \/ __|
# \__, | |_| | |_| | (_| | |_| \__ \ |_| | _| |_| | __/\ V /| |_| | |_) \__ \
# /_/ \___/|____/ \__,_|\__, |___/\___/|_| |____/ \___| \_/ \___/| .__/|___/
# |___/ |_|
#
# This script is to demonstrate bash scripting!
# Variables to be defined
ChallengeName=#90NgàyDevOps
TotalDays=90
# User Input
echo "Nhập tên của bạn: "
read name
echo "Chào mừng $name đến với $ChallengeName"
echo "Bạn đã hoàn thành bao nhiêu ngày trong $ChallengeName?"
read DaysCompleted
if [ $DaysCompleted -eq 90 ]
then
echo "Bạn đã hoàn thành, xin chúc mừng!"
elif [ $DaysCompleted -lt 90 ]
then
echo "Cố gắng lên nhé, mọi việc đã rất tốt rồi!"
else
echo "Bạn đã nhập sai số ngày, vui lòng nhập lại."
fi

Đây là cách xét điều kiện trong Bash. Cách so sánh cũng khá khác thường một chút.

  • eq: A = B trả ra ĐÚNG
  • ne: A != B (khác) trả ra ĐÚNG
  • gt: A > B trả ra ĐÚNG
  • ge: A >= B trả ra ĐÚNG
  • lt: A < B trả ra ĐÚNG
  • le: A =< B trả ra ĐÚNG

Ngoài ra, việc xét điều kiện với một tập tin cũng được tính đến, cụ thể như sau.

  • -d file: Tập tin đó là một thư mục
  • -e file: Tập tin tồn tại
  • -f file: Chuỗi cung cấp là một tập tin
  • -g file: Tập tin có cài đặt mã định danh nhóm (Group ID)
  • -r file: Tập tin đọc được
  • -s file: Tập tin có nội dung (Kích thước khác 0)
Terminal window
FILE="90DaysOfDevOps.txt"
if [ -f "$FILE" ]
then
echo "$FILE is a file"
else
echo "$FILE is not a file"
fi

Nguyên mẫu

Ta sẽ thử tạo một tập tin mà trong đó, ta sẽ tạo người dùng một cách tự động và cho phép người dùng xóa người dùng nếu cần.

user_full.sh
#! /usr/bin/bash
if [ -z "${1}" ]
then
echo "Tên đăng nhập của bạn là gì?"
read username
echo "Mật khẩu của bạn là gì?"
read -s password
#A user can be passed in as a command line argument
echo "$username đang được tạo..."
#A user is created with the name of command line argument
sudo useradd -m $username
#A password can be parsed in as a command line argument.
sudo chpasswd <<< $username:$password
sleep 2
echo "Nếu bạn muốn xóa, truyền lệnh 'del' và tên đăng nhập trong câu lệnh. Ví dụ: ./user_ful.sh del username"
else
sudo userdel -rf "${2}"
sleep 2
echo "${2} đã được xóa khỏi hệ thống."
exit 0
fi

Tập tin này cho phép người dùng nhập thông tin tên đăng nhập và mật khẩu trước khi tạo người dùng. Đồng thời cũng cho phép xóa người dùng khi cần. Dưới đây là kết quả khi chạy chương trình.

create_user

Kết thúc ngày thứ 19. Nội dung đã được lược giản cho phù hợp với điều kiện thực tế.

Bạn có thể xem thêm những tài liệu về Bash ở đây hoặc phần Tham khảo phía dưới.

Tài liệu tham khảo 📚

Mời mọi người chuyển sang trang này để theo dõi tất cả tài liệu liên quan trong giai đoạn 3, để giúp bản thân có được những tài liệu hữu ích về Linux trong làm việc với DevOps.

Hẹn gặp mọi người ở những ngày tiếp theo. 🚀