泷羽sec----shell编程(8)
until循环
前言
循环与前面的for
和while
循环一样,涉及到循环的主要目的就是进行遍历等
这个until
循环也是一样,用中文翻译这个关键字就是直到....才
实操
#!/bin/bash
i=0
until [ ! $i -lt 10 ]
do
echo $i
((i++))
done
可以看到这里的结构与前面的循环结构类似
唯一的一点是until关键字
这里的!可以理解为不的意思,与后面的-lt联合解释,就是不小于
until后面的判断是 直到i的值不小于10 (也就是大于10) 才会结束循环
换句话说就是当i的值小于10的时候,会执行循环
这段代码的功能就是输出0-9的数字
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
分支语句的结束
字符型
当然上面是数字形式,这里也可以是字符串的形式
read -p "请输入一个数值:" name
case $name in
"long")echo "你的名字是long"
echo "对吗"
;;
"yu")echo "你的名字是yu"
echo "对吗"
;;
*)echo "对不起"
echo "我不知道你的名字"
;;
esac
这里case
的分支中,"long")
当然也可以不加双引号,但是建议使用,因为如果输入有空格的话,就会匹配不到该分支
函数的基本知识
前言
与c
语言中一样,定义函数的方式
下面是定义函数的两种方式
函数名(){
函数体
}
或者
function 函数名(){
函数体
}
实操
定义变量
echostr(){
echo "longyu666"
}
echostr
调用方式一
在上述代码的情况下直接输入函数名
这里需要注意以下,函数的调用需要在函数声明之后,不然会提示未找到
调用方式二
类似于传参的形式,不过bash
中的传参与其他语言中不同,这里是使用$1
$2
...$n
作为第1、2...、n个参数
echostr(){
echo "你的字符串是$1"
}
echostr longyu666
与执行脚本一样,当在执行脚本后跟着一个传参时,$1
就是其第一个传参,$2
第二个传参......
这里就是在调用函数的使用,通过执行脚本时的第一个传参,$1
接收该参数值,并在函数体中输出
或者,在shell
脚本中调用,而不是执行脚本时传参
echostr(){
echo "你的字符串是$1"
}
str="longyu666"
echostr $str
那么这个时候,先定义一个变量str
,然后在通过函数调用,那么这个时候的$1
就是调用函数时的第一个参数值
因为在调用函数的时候,并没有把执行脚本时的传参给函数使用,这里的函数使用的是变量为传参
当然,也可以多参数的传递,不过需要注意,当在shell
脚本中,通过函数名+变量的形式调用函数的时候,这个时候的传参$1
,$2
等,只能接收调用函数时的传参
而不接受执行脚本时的传参bash fun.sh longyu666
。
下面这个两种在一起去看结果
当然这里也可以与read
联合使用的
本文来自博客园,作者:whitehe,转载请注明原文链接:https://www.cnblogs.com/whitehe/p/18578399