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