Shell编程 第四章 数组和函数

一、数组

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或blove | 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
🎈输入的只能是数字(包括小数)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值