until循环(条件为假的时候一直循环和while相反)
i=0
until [ ! $i -lt 10 ]
do
echo $i
((i++))
done
分析
- 初始化变量 :
i=0
:将变量i
初始化为0。
- 条件判断 (
until
循环) :until [ ! $i -lt 10 ]
:这里的逻辑有些复杂。它使用了until
循环,这意味着循环体将会一直执行,直到条件[ ! $i -lt 10 ]
为真。- 条件内部包含了两个部分:
!
:这是一个逻辑非操作符,它反转了后续表达式的真假值。$i -lt 10
:这是检查i
是否小于10的条件。
- 因此,
[ ! $i -lt 10 ]
实际上是在说:"当i
不小于10时"。换句话说,只要i
小于10,条件就为假,循环就会继续;一旦i
达到或超过10,条件变为真,循环就会终止。
- 循环体 :
echo $i
:输出当前的i
值。((i++))
:对i
进行自增操作,每次循环后i
都会加1。
- 结束循环 (
done
) :done
:标志着until
循环的结束
case语句
case
语句是 Bash
和其他 Unix shell 中的一种多分支选择结构,它提供了一种方便的方式来匹配一个值(通常是变量或命令的输出)与多个可能的模式。这在需要根据不同的输入执行不同代码块的情况下非常有用。
case
语句的基本语法
case $variable in
pattern1)
commands
;;
pattern2)
commands
;;
pattern3 | pattern4)
commands
;;
*)
default_commands
;;
esac
$variable
:要匹配的表达式或变量。patternN)
:定义匹配模式。每个模式后面跟着右括号)
。commands
:当$variable
匹配到相应的模式时要执行的一系列命令。;;
:结束一个模式和其对应的命令列表。*|*)
:通配符模式,用于处理所有不匹配前面任何模式的情况,类似于switch-case
中的default
。esac
:结束case
语句。
简单的例子
假设你有一个脚本,它根据用户提供的参数执行不同的操作:
如果你不想option是定义的变量,那你可以使用read -p "请你选择:" option
#!/bin/bash
option=start
case $option in
start)
echo "Starting..."
;;
stop)
echo "Stopping..."
;;
restart)
echo "Restarting..."
;;
status)
echo "Checking status..."
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
;;
esac
[外链图片转存中...(img-5C6YLcxO-1734696095973)
使用模式匹配
case
语句也支持简单的通配符模式匹配:
#!/bin/bash
file_extension=${1##*.}
case $file_extension in
txt|text)
echo "Text file"
;;
jpg|jpeg|png|gif)
echo "Image file"
;;
mp3|wav|flac)
echo "Audio file"
;;
*)
echo "Unknown file type"
;;
esac
在这个例子中,${1##*.}
提取了文件名的扩展名部分,并使用 case
语句来识别文件类型。
基本函数学习
一个函数我们要怎么创建怎么引用
创建函数
你可以通过以下方式定义一个函数:
function_name() {
# 函数体,这里是命令或代码块
}
或者,如果你喜欢更明确地指出这是一个函数,可以使用 function
关键字(这在某些版本的 Bash 中是可选的):
function function_name {
# 函数体,这里是命令或代码块
}
示例:创建一个简单的函数
DemoFunc() {
echo "hello world"
}
在这个例子中,DemoFunc
是一个函数名,当它被调用时,会执行函数体内的一系列命令,在这里就是打印 hello world
到标准输出。
引用(调用)函数
一旦定义了函数,你就可以通过函数名来调用它,后面不需要括号,除非你打算传递参数给函数。如果函数需要参数,可以在调用时将它们放在函数名后面的括号内。
示例:调用函数
DemoFunc
这行代码将调用 DemoFunc
函数,并执行其内部的命令。
传递参数给函数
你可以向函数传递参数,这些参数可以在函数体内通过 $1
, $2
, 等等来引用。$#
可以用来获取传递给函数的参数数量,而 $@
和 $*
可以用来引用所有参数。
示例:带参数的函数
GreetUser() {
echo "Hello, $1!"
}
GreetUser "Alice" # 调用函数并传递参数 "Alice"
在这个例子中,GreetUser
函数接受一个参数,并使用它来个性化问候消息。
返回值
Bash 函数可以通过 return
语句返回一个整数值,通常用于表示函数执行的状态。默认情况下,函数返回最后一条命令的退出状态。如果你想返回非整数数据,可以使用 echo
或其他形式的标准输出,并在调用处使用命令替换(如 $(...)
)来捕获输出。
示例:返回值
AddNumbers() {
local sum=$(( $1 + $2 ))
echo $sum # 使用 echo 输出结果
}
result=$(AddNumbers 5 3) # 捕获函数的输出
echo "The result is $result"
在这个例子中,AddNumbers
函数接收两个参数并将它们相加,然后通过 echo
输出结果。调用时,我们使用命令替换来捕获函数的输出,并将其赋值给变量 result
。