泷羽sec----shell编程(8)

until循环

前言

循环与前面的forwhile循环一样,涉及到循环的主要目的就是进行遍历等

这个until循环也是一样,用中文翻译这个关键字就是直到....才

实操

#!/bin/bash
i=0
until [ ! $i -lt 10 ]
do
	echo $i
	((i++))
done
可以看到这里的结构与前面的循环结构类似
唯一的一点是until关键字

这里的!可以理解为不的意思,与后面的-lt联合解释,就是不小于
until后面的判断是 直到i的值不小于10 (也就是大于10) 才会结束循环
换句话说就是当i的值小于10的时候,会执行循环

这段代码的功能就是输出0-9的数字

image

case语句

前言

与众多的编程语言一样,shell中也有case分支语句,这个语句的用处很是广泛,而且也是可以配合其他的语句进行使用的

这里进行case语句的简单了解,想要更深入的了解,可以自己去想什么地方能用到case分支语句

就比如一个简单的终端交互,用户输入对应的数字使用对应的功能,使用if语句过于繁杂,这个语句就可以解决

实操

数字型

read -p "请输入一个数值:" num
case $num in
	1)echo "你输入的数字是1"
	echo "对吗"
	;;
	2)echo "你输入的数字是2"
	echo "对吗"
	;;
	*)echo "你输入的是其他数字"
	echo "对吗"
	;;
esac

解释:

上面的read不用多说了,前面讲过好几次了,是读取用户的输入

case $num in这个是分支的开始。就相当于进行分支判断了,判断num在下面的哪个分支中

也就是这个num的值与下面的1)、2)...能够对应的上

比如,输入1 那么num的值是1,然后与case分支比较,发现与1)一样,就会执行1)中的命令等

那么当用户的输入没有匹配到的话,就会执行*)分支中的语句,这个其实相当于其他语言中的default一样,当用户输入的值无法匹配,默认就会输出这条分支中的语句

那么,每一个小分支中的;;是什么意思呢,表示这条小分支的结束,在这里就相当于结束,除非还有其他的命令。

esac表示这整个case分支语句的结束

image

image

字符型

当然上面是数字形式,这里也可以是字符串的形式

read -p "请输入一个数值:" name
case $name in
	"long")echo "你的名字是long"
	echo "对吗"
	;;
	"yu")echo "你的名字是yu"
	echo "对吗"
	;;
	*)echo "对不起"
	echo "我不知道你的名字"
	;;
esac

这里case的分支中,"long")当然也可以不加双引号,但是建议使用,因为如果输入有空格的话,就会匹配不到该分支

image

image

函数的基本知识

前言

c语言中一样,定义函数的方式

下面是定义函数的两种方式

函数名(){
	函数体
}

或者
function 函数名(){
	函数体
}

实操

定义变量

echostr(){
	echo "longyu666"
}
echostr

调用方式一

在上述代码的情况下直接输入函数名

image

这里需要注意以下,函数的调用需要在函数声明之后,不然会提示未找到

image

调用方式二

类似于传参的形式,不过bash中的传参与其他语言中不同,这里是使用$1 $2...$n作为第1、2...、n个参数

echostr(){
	echo "你的字符串是$1"
}
echostr longyu666

与执行脚本一样,当在执行脚本后跟着一个传参时,$1就是其第一个传参,$2第二个传参......

这里就是在调用函数的使用,通过执行脚本时的第一个传参,$1接收该参数值,并在函数体中输出

image

或者,在shell脚本中调用,而不是执行脚本时传参

echostr(){
	echo "你的字符串是$1"
}
str="longyu666"
echostr $str

那么这个时候,先定义一个变量str,然后在通过函数调用,那么这个时候的$1就是调用函数时的第一个参数值

因为在调用函数的时候,并没有把执行脚本时的传参给函数使用,这里的函数使用的是变量为传参

image

当然,也可以多参数的传递,不过需要注意,当在shell脚本中,通过函数名+变量的形式调用函数的时候,这个时候的传参$1$2等,只能接收调用函数时的传参

而不接受执行脚本时的传参bash fun.sh longyu666

下面这个两种在一起去看结果

image

当然这里也可以与read联合使用的

image

posted @ 2024-11-29 11:27  whitehe  阅读(7)  评论(0)    收藏  举报  来源