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
操作符
有时候 if
和 else
不够用,需要处理多个条件。这时 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 脚本中添加智能和逻辑啦。条件语句让你检查状态并做决策,而循环可以帮你自动完成重复的任务。还有更多的自动化任务机会等着你去探索哦!
GO TO FULL VERSION