Shell 脚本中的条件判断与循环
在 Shell 脚本中,条件判断和循环是实现自动化和控制流程的重要工具。本文将详细介绍 Shell 脚本中的 if 和 case 条件判断,以及 for 和while 循环的用法。
1. if 条件判断
if 语句用于根据条件执行不同的代码块。其基本语法如下:
if [ 条件 ]; then
# 如果条件为真,执行此代码
elif [ 其他条件 ]; then
# 如果其他条件为真,执行此代码
else
# 如果所有条件均不为真,执行此代码
fi
示例1:
#!/bin/bash
num=10
if [ $num -gt 5 ]; then
echo "num 大于 5"
elif [ $num -eq 5 ]; then
echo "num 等于 5"
else
echo "num 小于 5"
fi
示例2:
在 if 语句中,如果 then 直接换行,就不需要使用分号。这种情况下,分号用于在同一行上分隔 then 和条件部分。
if [ 条件 ]
then
# 如果条件为真,执行此代码
elif [ 其他条件 ]
then
# 如果其他条件为真,执行此代码
else
# 如果所有条件均不为真,执行此代码
fi
2. case 条件判断
case 语句用于根据变量的值匹配多个模式,并执行相应的代码块,适用于多分支选择。
基本语法如下:
case 变量 in
模式1)
# 执行代码
;;
模式2)
# 执行代码
;;
*)
# 默认执行代码
;;
esac
示例1:
#!/bin/bash
fruit="apple"
case $fruit in
"apple")
echo "这是一个苹果。"
;;
"banana")
echo "这是一个香蕉。"
;;
*)
echo "未知的水果。"
;;
esac
示例2:
在 case 语句中使用数字值判断时,可以直接使用数字:
number=2
case $number in
1)
echo "数字是一。"
;;
2)
echo "数字是二。"
;;
3)
echo "数字是三。"
;;
*)
echo "数字不在范围内。"
;;
esac
3. for 循环
-
for循环语法:
for (( 初始值; 循环控制条件; 变量变化 )) do 程序 done案例:从 1 加到 100
#!/bin/bash s=0 for ((i=1; i<=100; i++)) do s=$((s+i)) done echo $s -
for循环(列表)语法:
for 变量 in 值1 值2 值3 do 程序 done案例:顺序输出列表中的数字
#!/bin/bash for loop in 1 2 3 4 5 do echo "The value is: $loop" done
4. while 循环
语法:
while [ 条件判断式 ]
do
程序
done
案例:从 1 加到 100
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
s=$((s+i))
i=$((i+1))
done
echo $s
5.比较 $* 和 $@
脚本案例
#!/bin/bash
echo 'Using $*:'
for arg in $*
do
echo "$arg"
done
echo 'Using "$*":'
for arg in "$*"
do
echo "$arg"
done
echo 'Using $@:'
for arg in $@
do
echo "$arg"
done
echo 'Using "$@":'
for arg in "$@"
do
echo "$arg"
done
运行方式
假设脚本名为 compare.sh,通过以下命令运行:
bash compare.sh "arg1" "arg2" "arg3"
输出结果
Using $*:
arg1
arg2
arg3
Using "$*":
arg1 arg2 arg3
Using $@:
arg1
arg2
arg3
Using "$@":
arg1
arg2
arg3
解释
$*:未加引号时,每个参数作为独立的字符串输出。"$*":加引号时,所有参数被当作一个整体输出,参数之间用空格分隔。$@:未加引号时,和$*表现相同,每个参数作为独立的字符串输出。"$@":加引号时,每个参数保持独立,和未加引号时相同。
总结
Shell 脚本中的条件判断和循环是控制脚本执行流程的关键。通过 if 和 case 语句,我们可以根据不同的条件执行相应的操作,而 for 循环和while 循环则使我们能够轻松地处理列表中的每个元素。
拓展内容
1. read 读取控制台输入
基本语法
read [选项] [变量]
选项:
-p:指定读取值时的提示符。-t:指定读取值时等待的时间(秒)。
参数:
变量:指定读取值的变量名。
案例:
提示7秒内,读取控制台输入的名称
#!/bin/bash
read -t 7 -p "Enter your name in 7 seconds: " NAME
echo "你的名字是$NAME"
运行此脚本,会在提示符显示 "Enter your name in 7 seconds: ",并等待输入,最多等待7秒。
2.系统函数
basename 基本语法
basename [string / pathname] [suffix]
功能描述: basename 用于提取路径的文件名部分。
选项:
suffix:为后缀,如果指定,basename会去掉路径名或字符串中的后缀。
案例实操
截取文件名称
从路径 /home/bc/banzhang.txt 中提取文件名:
basename /home/bc/banzhang.txt
输出:
banzhang.txt
去掉后缀 .txt:
basename /home/bc/banzhang.txt .txt
输出:
banzhang
dirname 基本语法
dirname 文件绝对路径
功能描述: dirname 用于提取路径中的目录部分。
3485

被折叠的 条评论
为什么被折叠?



