文章目录
一、数组
1、概念
- 变量:用一个固定的字符串,代替一个不固定字符串。
- 数组:用一个固定的字符串,代替多个不固定字符串。
2、类型
- 普通数组:只能使用整数作为数组索引
- 关联数组:可以使用字符串作为数组索引
3、定义数组
(1)普通数组
- 方法一
array=() #定义一个空数组
array1[0]=a
array1[1]=b
array1[2]=c
这会得到一个包含三个元素的数组array1
- 方法二
array2=(a b c)
元素之间以空格隔开
(2)关联数组
关联数组可以使用非数字作为下标,可以是任意字符串,切记先声明关联数组
- 方法一
🎈定义一个名为user的数组
🎈数组名[索引]=变量值
$ declare -A user #声明关联数组
$ user[name]=devops
$ user[age]=18
- 方法二
declare -A user
user=([name]=devops [age]=18)
4、访问数组
echo ${数组名[变量]}
[root@linux-server script]# echo ${books[0]}
linux
[root@linux-server script]# echo ${books[1]}
shell
[root@linux-server script]# echo ${books[2]}
awk
项目 | Value |
---|---|
${!aa[@]} | 打印数组的所有索引,等同与echo ${!aa[*]} |
${aa[@]} | 访问数组中所有的元素,等同与echo ${aa[*]} |
${#aa[@]} | 统计元素的个数 ,等同与echo ${#aa[*]} |
${array1[@]:1} | 从数组下标1开始 |
${array1[@]:1:2} | 从数组下标1开始,访问两个元素 |
5、查看数组
- 查看关联数组
[root@localhost ~]# declare -A
declare -A ass_array1='([index1]="pear" [index2]="apple" [index3]="orange" )'
declare -A ass_array2='([index1]="tom" [index2]="jack" [index3]="alice" )'
- 查看普通数组
[root@localhost ~]# echo ${array1[@]}
pear apache orange peach
二、函数
shell函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好,放在指定位置,使用时直接调用即可。
- 函数必须先定义才能使用
- 优点:避免重复的代码
1、定义函数
(1)语法
- 方法一
name() { #name 函数名
命令列表
return value
}
- 方法二
function name {
命令列表
return value #返回结果并退出函数
}
(2)重要参数
- local:定义本地变量,只在函数内部生效
local 变量名称 #变量只在函数内生效。属于局部变量
实例:
# vim var.sh
#!/usr/bin/bash
a=10
var() {
echo $a
#local a
a=20
echo $a
}
var #调用函数
echo $a
- return: 返回结果并退出函数
value不能超过"0-255",是函数里面函数最后一条执行命令的返回值,默认返回值是由这条命令执行结果确定的.
返回值:return value:
实例:
[root@localhost ~]# vim return.sh
#!/usr/bin/bash
func(){
echo "hello"
return 250 #函数返回值
}
func
#echo $? #返回的是函数的返回值
if [ $? -eq 250 ];then
echo "成功"
else
echo "失败"
fi
exit:返回结果并退出程序
2、调用函数
(1)本地调用
- 不传递参数时,直接给出函数名即可:
name
- 如果要传递参数,多个参数之间以空格分开:
name 参数1 参数2 参数3
- 实例
[root@linux-server script]# vim func.sh
#!/bin/bash
myfunc(){ #定义函数
echo “This is my first shell function”
}
myfunc #函数调用
(2)通过其他脚本调用
source ./脚本名.sh #写函数脚本的绝对路径,这里指的是执行函数脚本,让它为下面调用函数生效
或
. /root/b.sh #通过.调用b.sh脚本,作用和使用source调用相同
3、取消函数
unset myfunc #取消函数
4、函数传参
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 位置参数来进行传参的,$1表示第一个参数,$2表示第二个参数…
$#
可以获取传递参数的个数;$@
或$*
可以一次性获取所有的参数$?
可以获取函数的退出状态(返回值)
function myFun(){
echo "第一个参数是 $1"
echo "第二个参数是 $2"
echo "第三个参数是 $3"
echo "第四个参数是 $4"
echo "第五个参数是 $5"
}
myFun 1 2 a 4 B #两种用法
myFun $1 $2 $3 $4 $5
++++++++++++++++++++++++++++++++++++++++++++++++++++
[root@localhost ~]# bash b.sh 5 4 3 2 1
第一个参数是 1
第二个参数是 2
第三个参数是 a
第四个参数是 4
第五个参数是 B
第一个参数是 5
第二个参数是 4
第三个参数是 3
第四个参数是 2
第五个参数是 1
三、正则表达式RE
- 基本元字符
示例 | 功能 | 示例 |
---|---|---|
^ | 行首定位符 | ^love |
$ | 行尾定位符 | love$ |
. | 匹配单个字符 | l…e |
* | 匹配前导符0到多次 | ab*love |
.* | 匹配任意多个字符(贪婪匹配) | |
[] | 匹配方括号中任意一个字符 | [lL]ove |
[ - ] | 匹配指定范围内的一个字符 | [a-z0-9]ove |
[^] | 匹配不在指定组里的字符 | [^a-z0-9]ove |
\ | 用来转义元字符 | love. |
\ < | 词首定位符 | <love |
\ > | 词尾定位符 | love> |
\ ( \ ) | 匹配后的标签 |
- 拓展元字符
示例 | 功能 | 示例 |
---|---|---|
+ | 匹配一次或多次前导字符 | [a-z]+ove |
? | 匹配零次或一次前导字符 | lo?ve |
a | b | 匹配a或b | love | hate |
x{m} | 字符x重复m次 | o{5} |
x{m,} | 字符x重复至少m次 | o{5,} |
x{m,n} | 字符x重复m到n次 | o{5,10} |
() | 字符组 | ov+ (ov)+ |
- 实例
[root@linux-server ~]# num1=1
🎈运用正则,判断需要[[ ]]
[root@linux-server ~]# [[ $num1 =~ ^[0-9]+$ ]] && echo "yes" || echo "no"
yes
🎈注意:^在[]内表示取反,^在[]外表示以什么开头
[root@linux-server ~]# num3=1b1
[root@linux-server ~]# [[ $num3 =~ ^[0-9]+$ ]] && echo "yes" || echo "no"
no
[root@linux-server ~]# num=1.6
[root@linux-server ~]# [[ $num =~ ^[0-9]\.[0-9]+$ || $num =~ ^[0-9]+$ ]] && echo "yes" || echo "no"
yes
🎈输入的只能是数字(包括小数)