Vòng lặp trong Shell Script – IF, FOR, WHILE, SELECT

Trong bài viết này, hãy cùng TTnguyen tìm hiểu về vòng lặp trong shell script và cấu trúc rẽ nhánh if, select. Có ba loại vòng lặp là: for, while và until.

Xem thêm:

một số toán tử trong shell script

viết chương trình Hello World Shell Script

1. Câu lệnh if

Cú pháp:

if điều_kiện
then
câu lệnh 1
...
fi

Câu lệnh 1 được thực hiện khi điều_kiện là đúng hoặc trạng thái kết thúc của điều_kiện.

Ví dụ 1:

Chúng ta khai báo một biến age có giá trị là 18. Sử dụng câu lệnh if để kiểm tra xem giá trị của age có lớn hơn hoặc bằng 18 không.

  • Nếu điều kiện đúng (exit code là 0), câu lệnh trong khối then sẽ được thực hiện, in ra thông báo “Bạn đã đủ tuổi để bỏ phiếu.”
  • Ngược lại, nếu điều kiện sai, câu lệnh trong khối else sẽ được thực hiện, in ra thông báo “Bạn chưa đủ tuổi để bỏ phiếu.”
#!/bin/bash

# Gán giá trị cho biến
age=18

# Sử dụng câu lệnh if để kiểm tra điều kiện
if [ $age -ge 18 ]
then
    echo "Bạn đã đủ tuổi để bỏ phiếu."
else
    echo "Bạn chưa đủ tuổi để bỏ phiếu."
fi

Ví dụ câu điều kiện if trong shellscript

Ví dụ 2: Chúng ta sử dụng [ -e “example.txt” ] để kiểm tra xem tập tin có tên “example.txt” có tồn tại hay không.

  • Nếu tập tin tồn tại, câu lệnh trong khối then sẽ được thực hiện và in ra thông báo “Tập tin tồn tại.”
  • Ngược lại, nếu tập tin không tồn tại, câu lệnh trong khối else sẽ được thực hiện và in ra thông báo “Tập tin không tồn tại.”
#!/bin/bash

# Kiểm tra xem tập tin "example.txt" có tồn tại hay không
if [ -e "example.txt" ]
then
    echo "Tập tin tồn tại."
else
    echo "Tập tin không tồn tại."
fi

2. Câu lệnh if…else…if

Cú pháp:

if điều_kiện
then
câu_lệnh_1
....
else
câu_lệnh_2
fi

Ví dụ:

#!/bin/bash

# Gán giá trị cho biến
number=-5

# Sử dụng câu lệnh if-elif-else để kiểm tra điều kiện
if [ $number -gt 0 ]
then
    echo "Số $number là số dương."
elif [ $number -lt 0 ]
then
    echo "Số $number là số âm."
else
    echo "Số $number là số không."
fi

3. Cấu trúc Select

Cú pháp:

select variable in danh_sách
do
    # Các câu lệnh sẽ được thực hiện dựa trên lựa chọn của người dùng
    # ...
done

Ví dụ sử dụng select để tạo một menu đơn giản với các tùy chọn “Đỏ,” “Xanh,” và “Vàng”:

#!/bin/bash

echo "Chọn một màu:"
options=("Đỏ" "Xanh" "Vàng")

select color in "${options[@]}"
do
    case $color in
        "Đỏ")
            echo "Bạn đã chọn màu Đỏ."
            ;;
        "Xanh")
            echo "Bạn đã chọn màu Xanh."
            ;;
        "Vàng")
            echo "Bạn đã chọn màu Vàng."
            ;;
        *)
            echo "Lựa chọn không hợp lệ. Vui lòng chọn lại."
            ;;
    esac
    break
done

Cấu trúc Select shellscript

4. Vòng lặp For

Vòng lặp for được sử dụng khi biết trước số lần lặp cụ thể.

Cú pháp:

for variable in danh_sách
do
    # Câu lệnh sẽ được thực hiện cho mỗi phần tử trong danh sách
    # ...
done

Ví dụ: 

#!/bin/bash

echo "Kieu 1"
for i in 1 2 3 4 5
do
 echo "In i lan $i"
done

#--------

echo "Kieu 2"

for((j = 1; j <= 5; j++))
do
 echo "In i lan $j"
done

#--------

echo "Kieu 3"

for k in {1..5}
do
 echo "In i lan $k"
done

#--------

echo "Kieu 3"
# Danh sách các tên
ten_list=("Phuong Anh" "Kieu Oanh" "Trieu Vy")

# Sử dụng cấu trúc for để lặp qua danh sách và hiển thị từng tên
for ten in "${ten_list[@]}"
do
    echo "Xin chào, $ten!"
done

Vòng lặp for shellscript

5. Vòng lặp While

Vòng lặp while được sử dụng khi muốn lặp cho đến khi một điều kiện nào đó không còn đúng.

Cú pháp:

while [ điều_kiện ]
do
    # Các câu lệnh sẽ được thực hiện trong khi điều_kiện là đúng
    # ...
done

Ví dụ: sử dụng cấu trúc while để đếm từ 1 đến 5:

  • Biến i được khởi tạo với giá trị là 1.
  • Cấu trúc while [ $i -le 5 ] sử dụng biểu thức điều kiện để kiểm tra xem i có nhỏ hơn hoặc bằng 5 không.
  • Câu lệnh echo trong khối do sẽ in ra màn hình giá trị của i.
  • Biến i được tăng giá trị sau mỗi lần lặp để tránh lặp vô hạn.
#!/bin/bash

# Khởi tạo biến đếm
i=1

# Sử dụng cấu trúc while để lặp qua các số từ 1 đến 5
while [ $i -le 5 ]
do
    echo "Số: $i"
    # Tăng biến đếm
    i=$((i+1))
done
FS_NUM=1
grep xfs /etc/fstab | while read FS MP REST
do
echo "${FS_NUM}: file system: ${FS}"
echo "${FS_NUM}: mount point: ${MP}"
((FS_NUM++))
done
while true
do
read -p "1: Show disk usage. case "SCHOICE" in 2: Show uptime. CHOICE
case "$CHOICE" in
1)
df -h
;;
2)
uptime
;;
*)
break
;;
esac
done

 

6. Vòng lặp Until

Cú pháp:

until [ điều_kiện ]
do
    # Các câu lệnh sẽ được thực hiện trong khi điều_kiện là sai
    # ...
done

Ví dụ: sử dụng until để đếm cho đến khi biến đếm trở thành 5:

#!/bin/bash

i=1

until [ $i -eq 6 ]
do
    echo "Số: $i"
    i=$((i+1))
done

Qua bài viết này, chúng ta đã cùng tìm hiểu về vòng lặp trong ShellScript. Với khả năng lặp lại một quy trình hay một tác vụ trong quá trình làm việc tự động, vòng lặp trong ShellScript giúp tối ưu hóa công việc, tiết kiệm thời gian và nâng cao hiệu suất làm việc. Cảm ơn bạn đã tham khảo quản trị linux trên ttnguyen.net.

Bài viết liên quan:

quản trị người dùng và nhóm trong Linux Ubuntu

các lệnh quản lý file trên linux ubuntu

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em