Các lệnh điều khiển luồng trong Shell

Lệnh case để kiểm soát luồng chương trình

Lệnh case trong Shell scripting được sử dụng để thực hiện các lựa chọn dựa trên giá trị của biến hoặc biểu thức. Nó so sánh giá trị đầu vào và thực thi các câu lệnh tương ứng với mỗi trường hợp.

Cú pháp:


case $biến in
    giá_trị_1)
        # Các lệnh thực thi khi biến khớp với giá trị 1
        ;;
    giá_trị_2)
        # Các lệnh thực thi khi biến khớp với giá trị 2
        ;;
    *)
        # Các lệnh mặc định nếu không có trường hợp nào khớp
esac

Ví dụ 1: In thông báo dựa trên giá trị nhập từ bàn phím


#!/bin/bash

echo "Chọn một tùy chọn:"
echo "1) Sao lưu"
echo "2) Sao chép"
echo "3) Thoát"

read -p "Nhập lựa chọn của bạn: " lua_chon
case $lua_chon in
    1|saoluong)
        echo "Đang thực hiện sao lưu..."
        ;;
    2|saochep)
        echo "Đang thực hiện sao chép..."
        ;;
    3|thoat)
        echo "Thoát khỏi chương trình..."
        ;;
    *)
        echo "Vui lòng nhập đúng số."
esac

Lệnh for dùng để lặp qua danh sách

Lệnh for cho phép duyệt qua từng phần tử trong một danh sách và thực hiện các hành động liên quan đến phần tử đó.

Cú pháp:


for bien in danh_sach
do
    # Các lệnh cần thực thi
done

Ví dụ 1: Duyệt qua một danh sách chuỗi


#!/bin/bash
for tu in a b c "xin chào"
do
    echo "$tu"
done

Ví dụ 2: Đọc giá trị từ biến


#!/bin/bash
ds="x y z w"
for ky_tu in $ds
do
    echo "Ký tự là: $ky_tu"
done

Lệnh while để lặp lại khi điều kiện đúng

Lệnh while sẽ tiếp tục thực thi khối lệnh bên trong khi điều kiện vẫn đúng.

Cú pháp:


while [điều_kiện]
do
    # Các lệnh thực thi
done

Ví dụ 1: In ra các số từ 10 đến 1 theo thứ tự giảm dần


#!/bin/bash
so=10
while [ $so -ge 1 ]
do
    echo "$so"
    so=$((so - 1))
done

Viết script xử lý tập tin và quản lý người dùng

Ví dụ 1: Tự động nén tất cả các tệp log trong thư mục /var/log/


#!/bin/bash
THU_MUC_NGUON=/var/log/
THU_MUC_DICH=/opt/sao_luu/$(date +%Y%m%d)

if [ ! -d "$THU_MUC_DICH" ]; then
    mkdir -p "$THU_MUC_DICH"
fi

for tap_tin in $(find $THU_MUC_NGUON -name "*.log")
do
    tar czf "$tap_tin.tgz" "$tap_tin"
done

mv /var/log/*.tgz "$THU_MUC_DICH"
ls -lh "$THU_MUC_DICH"
echo "Hoàn thành việc nén tệp."

Ví dụ 2: Tìm kiếm các máy chủ đã tắt trong mạng


#!/bin/bash
for ip in {1..254}
do
    ping -c 1 192.168.0.$ip &>/dev/null
    if [ $? -ne 0 ]; then
        echo "Máy 192.168.0.$ip đã tắt."
    fi
done

Ví dụ 3: Tạo tài khoản người dùng với mật khẩu ngẫu nhiên


#!/bin/bash
for ten_nguoi_dung in nguoidung{1..5}
do
    useradd $ten_nguoi_dung
    mat_khau=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1)
    echo "$ten_nguoi_dung:$mat_khau" >> /tmp/nguoidung.txt
    echo "$mat_khau" | passwd --stdin $ten_nguoi_dung &>/dev/null
    if [ $? -eq 0 ]; then
        echo "Tài khoản $ten_nguoi_dung đã được tạo thành công!"
    else
        echo "Tạo tài khoản thất bại."
    fi
done

Thẻ: Bash shell-scripting linux

Đăng vào ngày 18 tháng 9 lúc 13:24