前端之家收集整理的这篇文章主要介绍了
shell中的函数和数组,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
403_0@笔记
内容: * 20.16/20.17 shell中的
函数 * 20.18 shell中的数组 笔记日期:2017-11-24
@H_
403_0@<br /><br />
20.16/20.17 shell中的函数
@H_
403_0@ 在shell中
函数的关键字function是可以省略的,而且和其他大部分的编程语言一样,
函数要声明在
调用函数的语句之前,因为
代码都是从上至下执行的。以下写一个简单的
函数打印脚本的参数,
代码示例: $0 表示脚本的
名称,$# 表示此
函数参数的个数,要注意的是在
函数里的$1、$2、$3获得的是
函数的参数,而不是脚本的参数,在
函数体外使用$1、$2、$3获得的才是脚本的参数。
@H_
403_0@<br /> 运行结果:
@H_
403_0@<br /> 在
函数体外使用$n...获得的才是脚本的参数:
@H_
403_0@<br /> 运行结果:
@H_
403_0@<br /><br /> 这个示例是定义一个用于进行加法运算的
函数: <br /> 运行结果:
@H_
403_0@<br /><br /><br />
函数的基本知识介绍完了,下面来做一个小例题,使用函数来实现这个需求: 需求:
用户输入一个网卡
名称,此脚本就能够把网卡的IP地址打印出来。
代码示例:
#!/bin/bash
ip(){
#得到网卡的IP
ipAddress=`ifconfig |grep -A1 "$1: " |awk '/inet/ {print $2}'`
#过滤没有IP的网卡
if [ -n "$ipAddress" ]
then
echo "This eth IP is: $ipAddress"
else
echo "This eth not IP!"
exit 1
fi
}
read -p "Please input the eth name: " eth
#过滤用户的输入:输入内容不能为空,网卡不能不存在
if [ -n "$eth" ]
then
addr=`ifconfig |grep $eth`
if [ -n "$addr" ]
then
ip $eth
else
echo "Not this eth!"
exit 1
fi
else
echo "You need input eth name!"
exit 1
fi
@H_
403_0@<br /> 运行结果:
@H_
403_0@<br /><br /><br />
20.18 shell中的数组
@H_
403_0@ Shell中的数组合其他编程语言的数组概念是一样的,都是一堆数据的集合,下标也是从0开始,在日常编写的shell脚本中数组使用的
次数不像其他编程语言那么多。 数组的声明格式: name=(1 2 3 4) 使用空格隔开数组中的元素
@H_
403_0@<br /> 打印数组中的所有元素的常用方式有两种:
@H_
403_0@<br /> 打印数组中的某个元素,方括号里的是下标:
@H_
403_0@<br /> 打印数组的长度:
@H_
403_0@<br /> 给数组
增加元素:
@H_
403_0@<br /> 重新赋值数组中的某个元素:
@H_
403_0@<br />
删除数组中的某个元素,和
删除整个数组:
@H_
403_0@<br /><br /><br /> 我们可以使用seq命令给数组赋值一个范围的数值,例如我赋值1到10这个范围的数字:
@H_
403_0@<br />
截取数组示例:
@H_
403_0@<br /> 从第一个元素开始,
截取3个元素,
截取后原本的数组元素不会有变动。 还可以倒着
截取数组中的元素,例如我要从倒数第3个元素开始,
截取2个元素:
@H_
403_0@<br /> 数组替换,和sed命令有点类似,例如我要把数组中的3替换成100: 同样的原本的数组不会发生变动。 可以把替换后的数组元素赋值给一个数组变量: