前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >20.16/20.17 shell中的函数

20.16/20.17 shell中的函数

作者头像
运维小白
发布2022-01-06 14:08:59
2020
发布2022-01-06 14:08:59
举报
文章被收录于专栏:运维小白运维小白

shell中的函数

  • 把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。
  • 函数就是一个子shell,就是一个代码段,定义完函数就可以引用它
  • 格式:
    • function 后是函数的名字,并且 function 这个单词是可以省略掉的
      • 花括号{} 里面为具体的命令
代码语言:javascript
复制
格式: function f_name() {
                      command
             }
函数必须要放在最前面
  • 示例1
    • 这个函数是用来打印参数
代码语言:javascript
复制
#!/bin/bash
input() {
    echo $1 $2 $# $0
}

input 1 a b
代码语言:javascript
复制
[root@hf-01 shell]# cat !$
cat function.sh
#! /bim/bash
function input(){
  echo $1 $2 $# $0
}
input 1 a b
[root@hf-01 shell]# sh -x function.sh
+ input 1 a b
+ echo 1 a 3 function.sh
1 a 3 function.sh
[root@hf-01 shell]# sh function.sh
1 a 3 function.sh
[root@hf-01 shell]# 
  • 函数,可以直接写在脚本内,相当于直接调用
    • 內建变量
    • $1 第一个参数
    • $2 第二个参数
    • ...
    • ~
    • $# 参数名字
    • $0 总共有几个参数
代码语言:javascript
复制
[root@hf-01 shell]# cat function.sh
#! /bim/bash
function input(){
  echo $1 $2 $# $0
}
input $1 $2 
[root@hf-01 shell]# sh function.sh 1 4
1 4 2 function.sh
[root@hf-01 shell]# 

  • 示例2
    • 用于定义加法的函数,shell中定义的函数,必须放在上面
    • 在shell里面需要优先定义函数,比如在调用这个函数的时候,函数还没有定义,就会报错
      • 在想要调用哪一个函数,就必须在调用语句之前,先定义这个函数
代码语言:javascript
复制
#!/bin/bash
sum() {
    s=$[$1+$2]
#定义变量s = $1+$2 /其中 $1为第一个参数,$2为第二个参数
    echo $s
}
sum 1 2
#输出 第一个参数和第二个参数
代码语言:javascript
复制
[root@hf-01 shell]# cat !$
cat fun2.sh
#! /bin/bash
sum(){
   s=$[$1+$2]
   echo $s
}
sum 1 2
[root@hf-01 shell]# sh -x !$
sh -x fun2.sh
+ sum 1 2
+ s=3
+ echo 3
3
[root@hf-01 shell]# 

  • 示例3
    • 显示IP,输入网卡的名字,然后显示网卡的IP
代码语言:javascript
复制
#!/bin/bash
ip() {
    ifconfig |grep -A1 "eno16777736: " |awk '/inet/ {print $2}'
#查看网卡,过滤出ens33及下面的一行,匹配inet行并打印出第二段
}
read -p "Please input the eth name: " e
myip=`ip $e`
echo "$e address is $myip"
  • grep -A1 "ens33" 过滤显示出关键词及关键词下的一行
代码语言:javascript
复制
[root@hf-01 shell]# ifconfig |grep -A1 "eno16777736"
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.202.130  netmask 255.255.255.0  broadcast 192.168.202.255
--
eno16777736:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.202.150  netmask 255.255.255.0  broadcast 192.168.202.255
[root@hf-01 shell]# ifconfig |grep -A1 "eno16777736" |tail -1 
        inet 192.168.202.150  netmask 255.255.255.0  broadcast 192.168.202.255
  • 案例4
    • 判定是否为本机的网卡,判定输入的网卡是否有IP
代码语言:javascript
复制
#!/bin/bash
#coding:utf8
ip()
{
    a=`ifconfig |grep -A1 "$1 " |tail -1 |awk -F" " '{print $2}'`
    if [ -z "$a" ]
    then
        echo $1
        echo "没有这个网卡名"
        exit 1
    fi
    b=`echo $a |grep addr`
    if [ -z "$b" ]
    then
        echo $1
        echo "此网卡没有IP地址"
        exit 1
    fi
    echo $a
}
read -p "请输入你的网卡名字: " eth
ip $eth
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/02/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • shell中的函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档