相关文章推荐
想出国的拐杖  ·  c# - Unity ...·  2 年前    · 
逆袭的核桃  ·  Location hostname 属性 ...·  2 年前    · 
胆小的煎饼果子  ·  java 语音 java ...·  2 年前    · 
备案 控制台
学习
实践
活动
专区
工具
TVP
写文章
专栏首页 Laoqi's Linux运维专列 shell中的函数+数组+数组分片
10 0

海报分享

shell中的函数+数组+数组分片

一、函数:

函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。

直接来讲函数脚本吧:
#! /bin/bash
function inp(){             //定义一个inp的函数
echo $1 $2 $3 $0 $#         
inp 1 a 2 b                 //传入参数
例如咱们有个脚本进行互动:
sh test.sh 2 b 3 c
$1 : 第一个参数 就是如上的“2”
$2 : 第二个参数 就是如上的“b”
$3 : 第三个参数 就是如上的“3”
$0 : 脚本的本身名称 如上的“test.sh”
$# : 其实就是统计有几个参数这边是“2 b 3 c” 那就是$# = 4
$@ : 代表所有的参数 2 b 3 c
再来一个比较容易理解的脚本:
#!/bin/bash
sum() {             //定义的函数名为sum
    s=$[$1+$2]
    echo $s
sum 1 2

根据如上的介绍,这边的1 就是所谓的 $1参数;2 就是所谓的$2 参数

再来一个提高下:

输入网卡的名字,检查网卡的IP地址:

#!/bin/bash
ip() {
	ifconfig | grep -A1 "$e" |tail -1 | awk '{print $2}'
read -p "Please input the eth name: " e
myip=`ip $e`
echo "$e address is $myip"

如上脚本适用于centos 7执行步骤为:

sh -x function2.sh 
+ read -p 'Please input the eth name: ' e
Please input the eth name: ens33
++ ip ens33
++ grep -A1 ens33
++ tail -1
++ awk '{print $2}'
++ ifconfig
+ myip=192.168.96.129
+ echo 'ens33 address is 192.168.96.129'
ens33 address is 192.168.96.129

二、数组:

数组在脚本中虽然不经常用,但是一旦去用了就会非常实用!

定义数组
[[email protected]-01 sbin]# a=(1 2 3)          //定义一个数组a并赋值 1 2 3
[[email protected]-01 sbin]# echo ${a[*]}       //注意输出a的值的格式
1 2 3
[[email protected]-01 sbin]# echo ${a[1]}       //输出单个a数组中的值
[[email protected]-01 sbin]# echo ${a[2]}
[[email protected]-01 sbin]# echo ${a[0]}       //注意第一个其实是 0
[[email protected]-01 sbin]# echo ${#a[@]}      //获取数组的元素个数
3
元素的更改和赋值
[[email protected]-01 sbin]# a[3]=a         //给第三个数组赋值一个a
[[email protected]-01 sbin]# echo ${a[*]}
1 2 3 a
[[email protected]-01 sbin]# a[3]=aaa       //修改赋值为aaa
[[email protected]-01 sbin]# echo ${a[*]}
1 2 3 aaa
元素的删除
[[email protected]-01 sbin]# unset a[2]         //删除a数组中第2位的值
[[email protected]-01 sbin]# echo ${a[*]}
1 2 aaa
[[email protected]-01 sbin]# unset a            //删除a数组
[[email protected]-01 sbin]# echo ${a[*]}
数组分片
[[email protected] sbin]# a=(`seq 1 8`)      //给a赋值8个数
[[email protected] sbin]# echo ${a[*]}
1 2 3 4 5 6 7 8
假如现在的需求是我只需要 4 5 6
[[email protected] sbin]# echo ${a[@]:3:3}       //意思是,从第3个数组开始,截取3个。
4 5 6
另外一个需求 只需要 6 7
[[email protected] sbin]# echo ${a[@]:0-3:2}     //从倒数第三个开始,取两个数
6 7
数组替换
[[email protected]-01 sbin]# echo ${a[@]/5/asd}
1 2 3 4 asd 6 7 8
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客: http://www.okay686.cn 复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。