功能函数
函数 创建的过程 就是一个对功能代码封装的过程
完成特定功能的代码片段
函数必须先定义才能使用
优点:避免重复的代码
定义函数—怎么写函数脚本,如何定义
调用函数— 怎么使用函数,本地调用,2。通过其他脚本调用
取消函数---- unset func_name
函数传参----和脚本传参类似
命名空间:在shell语言中函数的命名空间是函数内和函数外定义变量是一样的,函数内外不能赋值同样名字的变量
#变量:如果在同一个命名空间可以用,如果不再同一个命名空间就不能用
#函数变量使用的范围:默认,函数里的变量会在函数外面生效
#函数变量如果不让在其他空间用使用:local 分开
脚本案例;
#!/usr/bin/bash
a=10
var() {
echo $a
#local a
a=20
echo $a
}
var #调用函数
echo $a
变量名称 #变量只在函数内生效。local 局部变量 只变量 函数标签内的 不会影响外面
返回值:return value:#value不能超过0-255,是函数里面函数最后一条执行命令的返回值,默认返回值是由这条命令执行结果确定的.
return 结束函数 并返回一个值 继续执行 函数外面的代码
脚本案例
#!/usr/bin/bash
func(){
echo “hello”
return 250 #函数返回值
}
func
#echo $? #返回的是函数的返回值
if [ $? -eq 250 ];then
echo “成功”
else
echo “失败”
fi
图片解答
函数 函数调用
函数外面 全局变量 自己定义的值
local 局部变量 只变量 函数标签内的 不会影响外面
return 结束函数 并返回一个值 继续执行 函数外面的代码
exit 返回值 直接退出
函数名 function_name,这就是你将使用它从其他地方在你的脚本调用。
取消函数
脚本如下 可以自定义
#!/bin/bash
fun () {
echo “hello”
}
fun
unset fun #取消函数
fun
source 调用 子文件 可以把写的函数写到子文件
一般子文件里面 都是写函数,不会去写其他,要不然调用的时候 会被显示
source 调用 子文件 可以把写的函数写到子文件
测试结果
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 位置参数来进行传参的,$1表示第一个参数,$2表示第二个参数…
自己理解;函数传参 自己理解 函数内部打印是按照位置打印
你在外面输入 改变位置 他也是按照内部位置来进行打印
脚本案例;
[root@linux-server script]# vim fun04.sh
fun() {
echo $[$1*$2*$3]
}
fun $1 $2 $3
[root@linux-server script]# bash fun04.sh 1 3 5
15
什么是数组?
数组也是一种变量,常规变量只能保存一个值,数组可以保存多个值
#普通数组:只能用整数作为数组的索引–0 下标
#关联数组:可以使用字符串作为数组的索引
第一种方法 定义 数组 1 简单类
如何去定义一个数组 a=(123 456 789 )
如何去调用一个数组 echo $ {a[0]} 调用数组123
如何去调用一个数组 echo $ {a[1]} 调用数组123
如何去调用一个数组 echo $ {a[3]} 调用数组123
第二种方法 定义 数组
declare -a b=(123 456 789)
如何去调用一个数组 echo $ {b[0]} 调用数组123
如何去调用一个数组 echo $ {b[1]} 调用数组123
如何去调用一个数组 echo $ {b[3]} 调用数组123
只限制语 普通数组
root@linux-server script]# aa=(haha heihei baibai)
[root@linux-server script]# echo ${aa[0]} #访问数组中的第一个元素
[root@linux-server script]# echo ${aa[@]} #访问数组中所有的元素 等同与echo ${aa[*]}
[root@linux-server script]# echo ${#aa[@]} #统计元素的个数
[root@linux-server script]# echo ${!aa[@]} #打印数组的所有索引
关于在shell脚本中数组变量中 “*”跟 “@” 区别
1.当变量加上"" 会当成一串字符串处理.
2.@当变量加上"" 依然当做数组处理.
3.在没有加上"" 的情况下效果是一样的数组
@
*
特点记忆方法 @与 很相似 ,加上双引号“”漏真形
1.正则表达式(regular expression, RE)是一种字符模式,用于在查找过程中匹配指定的字符。
2.在大多数程序里,正则表达式都被置于两个正斜杠之间;例如/l[oO]ve/就是由正斜杠界定的正则表达式,它将匹配被查找的行中任何位置出现的相同模式。在正则表达式中,#元字符是最重要的概念。
#正则表达式分为:
正则表达式基本元字符
正则表达式拓展元字符
元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
[root@linux-server ~]# num1=1
#运用正则,判断需要[[ ]]
[root@linux-server ~]# [[ n u m 1 = [ 0 − 9 ] + num1 =~ ^[0-9]+ num1= [0−9]+ ]] && echo “yes” || echo “no”
yes
#注意:在[]内表示取反,在[]外表示以什么开头
[root@linux-server ~]# num3=1b1
[root@linux-server ~]# [[ n u m 3 = [ 0 − 9 ] + num3 =~ ^[0-9]+ num3= [0−9]+ ]] && echo “yes” || echo “no”
no
[root@linux-server ~]# num=1.6
[root@linux-server ~]# [[ KaTeX parse error: Can't use function '\.' in math mode at position 14: num =~ ^[0-9]\̲.̲[0-9]+ || n u m = [ 0 − 9 ] + num =~ ^[0-9]+ num= [0−9]+ ]] && echo “yes” || echo “no” //输入的只能是数字(包括小数)
yes