Shell ❀ 函数与数组
Posted 无糖可乐没有灵魂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell ❀ 函数与数组相关的知识,希望对你有一定的参考价值。
文章目录
六、函数与数组
1、函数
主要介绍在Shell编程中函数的定义与使用方法、语法结构以及案例解析;
1.1 函数定义
函数就是将一组功能相对独立的代码集中起来,形成一个代码块,这个代码块可以完成某个具体的功能,从上面的定义可以看出,shell中的函数的概念与其他语言中的函数定义并没有太大的区别,从本质上讲,函数就是一个函数名到某个代码块的映射关系;
1.2 函数的优势
- 把相同的程序段定义为函数,可以减少整个程序段代码量,提升开发效率;
- 增加程序段可读性、易读性,提升管理效率;
- 可以实现程序功能模块化,使得程序具有通用性;
1.3 函数语法
function 函数名()
指令
return #返回语句,非必需参数,只能返回某个0-255之间的整数值
函数写法可以简化,简化1格式:
function 函数名
指令
return
简化2格式:
函数名()
指令
return
1.4 函数调用
在shell中函数的调用方法如下:
function_name param1 param2 ...
# function_name为函数名称,param为函数参数
# return语句只能返回某个0-255之间的整数值
1.5 操作案例
- 脚本判断某个IP地址段那些主机在线;
[root@localhost shell]# cat a1.sh
#!/bin/bash
PING()
for I in 1..10;do
if ping -c 1 -w 1 192.168.1.$I &> /dev/null; then
echo "192.168.1.$I is up!"
else
echo "192.168.1.$I is down!"
fi
done
#函数调用
PING
使用函数传入参数;
[root@localhost shell]# cat a2.sh
#!/bin/bash
PING()
if ping -c 1 -w 1 $1 &> /dev/null;then
echo "$1 is up!"
else
echo "$1 is down!"
fi
#使用for循环引入参数值赋予函数调用
for I in 1..10;do
PING 192.168.1.$I
done
使用函数返回值判断;
[root@localhost shell]# cat a3.sh
#!/bin/bash
PING()
if ping -c 1 -w 1 $1 &> /dev/null;then
#$1为位置变量,则$1就代表192.168.1.$I
return 0
else
return 1
fi
#函数的返回结果为不同的IP地址,则这些IP地址为$1位置变量
for I in 1..10;do
PING 192.168.1.$I
#调用函数
if [ $? -eq 0 ];then
echo "192.168.1.$I is up!"
else
echo "192.168.1.$I is down!"
fi
done
- 使用脚本循环判断一个参数作为用户名是否存在,存在即返回UID与shell;不存在返回错误状态码;
[root@localhost shell]# cat a4.sh
#!/bin/bash
USER()
if id $1 &> /dev/null;then
echo "`grep ^$1 /etc/passwd | cut -d : -f 3,7`"
return 0
else
echo "no $1"
return 1
fi
read -p "please input your username:" username
until [ $username == q -o $username == Q ];do
USER $username
if [ $? -eq 0 ];then
read -p "please input again:" username
else
read -p "no $username,please input again:" username
fi
done
1.6 函数库文件
创建一个函数库文件的过程非常类似于编写一个shell脚本,脚本与库文件之间的唯一区别是在于函数库文件通常只包括函数,而脚本中则可以即包括函数和变量的定义,又包括可执行的代码,此处所说的可执行代码是指位于函数外部的代码,当脚本被载入后这些代码会立即执行;
. filename
# filename为库文件名称
1.7 递归函数
递归函数就是反复调用自身;
[root@localhost shell]# cat a5.sh
#!/bin/bash
fact()
local num=$1
local fac
if ((num==1));then
fac=1
else
((dec=num-1))
fact $dec
fac=$?
fac=`expr $num \\* $fac`
fi
return $fac
fact $1
echo $?
2、数组
主要介绍在Shell编程中数组的定义与使用方法、语法结构以及案例解析;
2.1 数组定义
- 用小括号将变量值括起来赋值给数组变量,每个变量使用空格间隔;
array=(value1 value2 ...)
- 用小括号将变量括起来,使用键值对方式进行赋值;
array=([1]=one [2]=two [3]=three)
- 通过分别定义数组变量方法;
array[0]=a;array[1]=b;array[2]=c
- 动态的定义变量,并使用命令的输出结果作为数组的内容;
array=( 命令 )
2.2 定义股关联数组
# 申明关联数组变量
[root@localhost shell]# declare -A ass_array1
[root@localhost shell]# declare -A ass_array2
2.3 数组的赋值
赋值格式
数组名[索引]=变量值
操作案例
# 单个数据赋值
[root@localhost shell]# ass_array1[index1]=paper
[root@localhost shell]# ass_array1[index2]=apple
[root@localhost shell]# ass_array1[index3]=orange
[root@localhost shell]# ass_array1[index4]=peach
# 多组数据赋值
[root@localhost shell]# ass_array2=([index1]=tom [index2]=jack [index3]=alice [index4]='bash shell')
2.4 数组操作
# 获取所有元素,@与*同意
[root@localhost shell]# echo $ass_array2[@]
888 444 555 666 777 111 222 333
# 获取元素下标
[root@localhost shell]# echo $!ass_array2[@]
index8 index4 index5 index6 index7 index1 index2 index3
# 获取数组长度
[root@localhost shell]# echo $#ass_array2[@]
8
# 查询第一个元素
[root@localhost shell]# echo $ass_array2[0]
# 添加元素
[root@localhost shell]# ass_array2[3]=d
[root@localhost shell]# echo $ass_array2[@]
888 444 555 666 777 111 222 333 d
# 添加多个元素
[root@localhost shell]# ass_array2+=(e f g)
# 删除某个元素
[root@localhost shell]# unset ass_array2[index1]
# 删除数组
[root@localhost shell]# unset ass_array2
2.5 数组操作案例
- 遍历数组
# 使用数组元素索引
[root@localhost shell]# cat a1.sh
#!/bin/bash
IP=(192.168.1.1 192.168.1.2 192.168.1.3)
for (( i=0;i<$#IP[@];i++ ));do
echo $IP[$i]
done
[root@localhost shell]# chmod a+x a1.sh
[root@localhost shell]# ./a1.sh
192.168.1.1
192.168.1.2
192.168.1.3
# 使用数组元素个数
[root@localhost shell]# cat a2.sh
#!/bin/bash
IP=(192.168.1.1 192.168.1.2 192.168.1.3)
for IP in $IP[@] ;do
echo $IP
done
[root@localhost shell]# chmod a+x a2.sh
[root@localhost shell]# ./a2.sh
192.168.1.1
192.168.1.2
192.168.1.3
- 将字符串里的字母逐个放入数组中,并输出到 标准输出;
[root@localhost shell]# cat a4.sh
#!/bin/bash
chars='abcdefg'
for (( i=0;i<$#chars;i++ ));do
array[$i]=$chars:$i:1
echo $array[$i]
done
以上是关于Shell ❀ 函数与数组的主要内容,如果未能解决你的问题,请参考以下文章