CodeGym /课程 /Docker SELF /Bash 中的条件语句 (`if`, `else`) 和循环 (`for`, `while`)

Bash 中的条件语句 (`if`, `else`) 和循环 (`for`, `while`)

Docker SELF
第 3 级 , 课程 4
可用

Bash 中的条件语句 if, else 和循环 for, while

1. Bash 中的条件语句:if, else 和一点点魔法

条件语句有什么用?

条件语句可以让你的脚本根据输入数据、变量或甚至是命令的执行结果来做出决定。比如,你想检查文件是否存在,或者确保服务器可用以执行下一步操作。这时候 if 结构就非常有用了。

基本语法

这是 bash 中经典的 if 条件语句样式:

if [ 条件 ]; then
    # 如果条件为真,这里的代码会被执行
    echo "条件已满足!"
else
    # 如果条件为假,这里的代码会被执行
    echo "条件未满足!"
fi

关键词:

  • if, then, else, 和 fi (关闭 if 块)是魔法词汇。没有它们脚本就不能正常工作。
  • 方括号 [ ... ] 用于检查条件。

例 1: 检查文件是否存在

#!/bin/bash

FILE="/etc/passwd"

if [ -f $FILE ]; then
    echo "文件 $FILE 存在。"
else
    echo "文件 $FILE 未找到。"
fi

解释:

  • -f 检查文件是否存在。
  • 如果文件存在,echo 命令会输出相应的信息。如果不存在,则执行 else 块。

结合命令使用条件语句

你可以用命令的执行结果作为条件,因为在 Linux 中,一切都是命令。

例 2: 检查网站是否可用

#!/bin/bash

if ping -c 1 example.com &> /dev/null; then
    echo "网站可用。"
else
    echo "网站不可用。"
fi

解释:

  • ping -c 1 发送一个请求到服务器。如果服务器有回应,条件为真。
  • &> /dev/null 隐藏命令的输出,避免终端被信息占满。

使用 elif 操作符

有时候 ifelse 不够用,需要处理多个条件。这时 elif 就派上用场了。

例 3: 判断一天中的时间段

#!/bin/bash

HOUR=$(date +%H)

if [ $HOUR -lt 12 ]; then
    echo "早上好!"
elif [ $HOUR -lt 18 ]; then
    echo "下午好!"
else
    echo "晚上好!"
fi

解释:

  • date +%H 返回当前时间的小时(24 小时制)。
  • 我们将当前时间与固定值进行比较:如果小于 12,为早上;小于 18,为下午;否则为晚上。

2. bash 中的循环:重复是学习之母

循环是让脚本重复执行某些操作的一种方法,只要特定条件成立。这在需要处理多个文件、重复某个任务多次或者等待某个事件时非常有用。

循环 for

for 遍历值列表(例如文件或数字),并对每个值执行指定操作。

示例 4: 简单的 for 循环

#!/bin/bash

for i in {1..5}; do
    echo "这是第 $i 次迭代"
done

解释:

  • {1..5} — 数字 1 到 5 的列表。
  • 每次迭代中变量 i 取列表中的一个值。

示例 5: 遍历目录中的文件

#!/bin/bash

for FILE in /etc/*; do
    echo "正在处理文件: $FILE"
done

解释:

  • /etc/* — 是目录 /etc 中所有文件的列表。
  • 每次迭代中变量 FILE 包含一个文件的名字。

循环 while

while 在条件成立时执行操作。

示例 6: 猜数字游戏

#!/bin/bash

SECRET=5
GUESS=0

while [ $GUESS -ne $SECRET ]; do
    echo "输入你的猜测(数字 1 到 10):"
    read GUESS
done

echo "你猜对了!"

解释:

  • [ $GUESS -ne $SECRET ] — 只要输入的数字 GUESS 不等于秘密数字 SECRET,条件就成立。

组合循环和条件语句

有时候条件语句和循环结合使用。

示例 7: 检查多个网站

#!/bin/bash

SITES=("example.com" "google.com" "nonexistent.website")

for SITE in ${SITES[@]}; do
    if ping -c 1 $SITE &> /dev/null; then
        echo "$SITE 可用。"
    else
        echo "$SITE 不可用。"
    fi
done

解释:

  • 数组 SITES 包含网站列表。
  • for 遍历数组中的每个网站。
  • if 使用 ping 检查网站是否可用。

3. 实践练习

域名检查

编写一个脚本,它接受一个域名作为参数并检查其可用性。

提示:

if ping -c 1 $1 &> /dev/null; then
    echo "域名可用."
else
    echo "域名不可用."
fi

文件操作

编写一个脚本,检查多个文件是否存在,并为每个文件输出检查结果。

提示:

FILES=("file1.txt" "file2.txt" "/etc/passwd")
for FILE in ${FILES[@]}; do
    if [ -f $FILE ]; then
        echo "$FILE 存在."
    else
        echo "$FILE 不存在."
    fi
done

乘法表

编写一个带有嵌套循环的脚本,输出 1 到 10 的乘法表。

提示:

for i in {1..10}; do
    for j in {1..10}; do
        echo -n "$((i * j)) "
    done
    echo ""
done

现在你可以在你的 bash 脚本中添加智能和逻辑啦。条件语句让你检查状态并做决策,而循环可以帮你自动完成重复的任务。还有更多的自动化任务机会等着你去探索哦!

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION