shell脚本--函数

这篇具有很好参考价值的文章主要介绍了shell脚本--函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一:shell函数定义

1.函数的含义

2.函数的优点

3.函数的格式

4.函数返回值

(1)return输出

(2)echo输出

 二:函数传参

1.情景一

 2.情景二

3.情景三

 4.情景四

 三:递归函数

 1.递归函数定义

 2.通过递归函数实现阶乘

3.使用递归函数实现目录和文件的依次输出

 4.案例实练1

 5.案例实练2

 四:函数库

1.函数库含义

2.函数库实例


一:shell函数定义

1.函数的含义

在shell中,函数是一段代码块,可以在需要时调用。函数通常用于封装重复使用的代码,使代码更简洁、可读性更强。

2.函数的优点

使用函数可以避免代码重复,可以将大的工程分割为若干小的功能模块,使大妈的可读性更强。

3.函数的格式

格式1:
function 函数名 {

命令序列
【return x】 //使用return或exit可以显示地结束函数

}
函数名

格式2:
函数名 () {

命令序列

}
函数名

4.函数返回值

(1)return输出

return表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值。

使用原则:

1.1函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码

1.2退出状态码必须是0-255,超出时值将为除以256取余

[root@localhost hansu]# vim test1.sh

#!/bin/bash

function test01 {
  read -p "请输入一个整数:" num
  return  $[num *2]
}

test01
echo $?

shell脚本--函数

 shell脚本--函数

(2)echo输出

echo输出不会有0-255的限制

[root@localhost hansu]# vim test2.sh

#!/bin/bash

sum() {
  read -p "请输入第一个整数:" num1
  read -p "请输入第二个整数:" num2
  SUM=$[num1+num2]
  echo "两个数的和为:$SUM" 
}

sum

shell脚本--函数

 shell脚本--函数

 二:函数传参

1.情景一

[root@localhost hansu]# vim test3.sh

#!/bin/bash

sum() {

   num=$[ $1 - $2 ]
   echo $num

}

#$1和$2为脚本后的位置参数
sum $1 $2

shell脚本--函数

 2.情景二

[root@localhost hansu]# vim test3.sh

#!/bin/bash

sum() {

   num=$[ $1 - $2 ]           #参数体内的$1和$2为函数后的位置参数
   echo $num

}
sum $2 $1                     #$1和$2为脚本后的位置参数

shell脚本--函数

 注: 此时参数体外的$2为脚本后跟的位置参数 45 ,参数体内的$1为参数体外跟的的位置参数$2,num=$[ $1 - $2 ] 意思为45 -92。

shell脚本--函数 注: 此时参数体外的$1为脚本后跟的位置参数 92 ,参数体内的$2为参数体外跟的的位置参数$1。

3.情景三

[root@localhost hansu]# vim test4.sh

#!/bin/bash

#定义函数
sum2() {
  #函数体内部的$1 $2 代表的是调用函数时,函数后面跟的位置参数
  sum=$[$1 - $2]
  echo $sum
  echo "在函数体内部的\$#代表调用函数时,函数后面跟的参数个数,当前函数后面有$#个参数"
  echo "在函数体内部的\$@代表调用函数时,函数后面跟的所有参数,当前函数后面的参数有:$@"
  echo "在函数体内部,\$0代表$0,为脚本本身"
}

echo "在函数体外时,\$#代表脚本后面跟的参数个数,当前脚本后面有$#个参数"
echo "在函数体外时,\$@代表脚本后面跟的所有参数,当前脚本后面参数有:$@"
echo "在函数体外,\$0代表$0,为脚本本身"

#调用函数
#函数体外的$1 $2 代表的是执行脚本时,脚本后面跟的位置参数
sum2 $2 $1

shell脚本--函数

 4.情景四

函数变量的作用范围:

函数在shell脚本中仅在当前shell环境中有效,shell脚本中变量默认全局有效,将变量限制在函数内部使用local命令。

[root@localhost hansu]# vim test5.sh

#!/bin/bash

A01() {
  echo $name
#local 将变量限制在函数体内
  local name=laoliu

  echo $name

}

name=laowang

A01

echo $name

shell脚本--函数 

shell脚本--函数

 三:递归函数

 1.递归函数定义

函数调用自己本身的函数

 2.通过递归函数实现阶乘

[root@localhost hansu]# vim test6.sh

#!/bin/bash

fact() {
  if [ $1 -eq 1 ];then         #当第一个位置参数等于1,就输出1
    echo 1
  elif [ $1 -gt 1 ];then       #当位置参数大于1时
    local tmp=$[$1 - 1]        #函数体内变量tmp为位置参数减一
    local res=$(fact $tmp)     #重新调用函数
    echo $[$1 * res]           #输出位置参数$1乘以函数体内变量res
  else
    echo "输入的值无效。请输入大于等于1的整数!"
  fi
}

#####main#####

read -p "请输入一个大于等于1的整数:" num
res=$(fact $num)              #将结果赋予新变量
echo "$num的阶乘值为$res"

shell脚本--函数

3.使用递归函数实现目录和文件的依次输出

使用函数递归目录/var/log,如果是文件直接输出文件名,如果是目录则输出目录名且输出此目录下的所有目录和文件名

[root@localhost hansu]# vim test7.sh
#!/bin/bash

listf () {
  for f in $(ls $1)            #f在查看/var/log的环境中
  do
    if [ -d "$1/$f" ];then     #判断/var/log/下$f是否为目录
      echo "$2目录$f"          #是目录输出目录
      listf "$1/$f" "  $2"     #重新调用函数,继续递归查看判断并缩进两个字符
    else
      echo "$2文件$f"          #其他,即输出为文件
    fi

  done

}

#/var/log为函数后跟的$1位置参数,空为$2位置参数
listf "/var/log" ""

shell脚本--函数shell脚本--函数

 4.案例实练1

执行命令 mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt,
通过脚本输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件

[root@localhost hansu]# vim test8.sh

#!/bin/bash

#定义一个遍历PATH环境变量的函数
list_path() {
    IFSB=$IFS                        #备份IFS
    IFS=$IFS':'                      #重新赋值,允许以:分割
    for F in $PATH                   #设置for循环
    do
        echo $F                
    done
    IFS=$IFSB                        #还原IFS
}

#定义一个递归函数
listf() {
    for F in $(ls $1)
    do
        if [ -d "$1/$F" ];then        #如果PATH下的$F为目录
            echo "$2$F"               #输出目录名,$2为空
            listf "$1/$F" "  $2"      #重新调用函数,递归查询判断,并缩进两个字符
        else
            if [ ! -x "$1/$F" ];then  #如果没有执行权限
                echo "$2$F"           #输出文件名
            fi
        fi
    done
}




######main######

folder=$(list_path)       #folder获取目录

for path in $folder       #遍历目录
do
    echo $path
    listf "$path" "  "    #调用递归函数

done

shell脚本--函数

 5.案例实练2

将一个点分十进制格式的IP地址转换成点分二进制格式
比如 255.255.255.255   -->  11111111.11111111.11111111.11111111

[root@localhost hansu]# vim test9.sh

#!/bin/bash
#!/bin/bash

#定义一个用于十进制转换为二进制的函数
switch_bin() {
    NUM=$1                                    #位置变量进行传参
    for i in {1..8}                           #循环8次
    do
        SUM=$[NUM % 2]$SUM                    #取余
        let NUM/=2                            #除以2
    done
    echo $SUM
}

#定义一个用于分割IP的函数
SPT() {
    IP=$1                                     #获取$1的变量
    for i in {1..4}                           #循环4次
    do
        num=${IP%%.*}                         #从后面开始删除
        IP=${IP#*.}                           #从前面开始往后删除
        BIN=$(switch_bin num)                 #转换
        echo -n $BIN.
    done

}


#####main#####
read -p "请输入一个合法IP:" INIP             #输入ip地址
res=$(SPT $INIP)                              #转换后的结果
echo ${res%.*}                                #删掉最后一个点

shell脚本--函数

 四:函数库

1.函数库含义

在shell中,可以将一些常用的函数封装成函数库,方便在多个脚本中复用。函数库一般以.sh为后缀,可以在脚本中通过source命令引入。

2.函数库实例

(1)编辑函数库

[root@localhost hansu]# vim hsk


jiafa() {                                     #定义加法函数
    echo $[$1 + $2]                   
}

jianfa() {                                    #定义减法函数
#!/bin/bash

jiafa() {                                     #定义加法函数
    echo $[$1 + $2]                   
}

jianfa() {                                    #定义减法函数
    echo $[$1 -$2]
}

chengfa() {                                   #定义乘法函数
    echo $[$1 * $2]
}

chufa() {                                     #定义除法函数
   if [ $2 -eq 0 ];then
       echo "除数不可为0"
   else
       echo $[$1 / $2]
   fi
}

fact() {                                      #定义阶乘函数
  if [ $1 -eq 1 ];then
    echo 1
  elif [ $1 -gt 1 ];then
    local tmp=$[$1 - 1]
    local res=$(fact $tmp)
    echo $[$1 * res]
  else
    echo "输入的值无效。请输入大于等于1的整数!"
  fi
}

shell脚本--函数

(2)编辑函数脚本,运行

[root@localhost hansu]# vim test10.sh

#!/bin/bash

#加载函数库文件到当前脚本的shell
. /opt/hansu/hsk

#定义两个变量
value1=15
value2=6

res1=$(jiafa $value1 $value2)
res2=$(jianfa $value1 $value2)
res3=$(chengfa $value1 $value2)
res4=$(chufa $value1 $value2)
res5=$(fact $value1 $value2)

echo "加法的结果为$res1"
echo "减法的结果为$res2"
echo "乘法的结果为$res3"
echo "除法的结果为$res4"
echo "阶乘的结果为$res5"

shell脚本--函数  shell脚本--函数 

 文章来源地址https://www.toymoban.com/news/detail-436925.html

 

到了这里,关于shell脚本--函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • shell脚本实现删除服务器指定目录下文件方法

    上述脚本中,find 命令用于查找指定目录下4天以前的文件,并将其删除。其中,-type f 表示只查找普通文件,不包括目录和符号链接等其他类型的文件;-mtime +3 表示查找修改时间早于3天前的文件;-delete 表示删除查找到的文件。 脚本中的 $folder_path 可以替换为实际的目录路径

    2023年04月19日
    浏览(64)
  • shell 脚本统计 http 文件服务器下指定目录及其子目录下所有文件的大小

    shell脚本如下: 首先 vi calculate_size.sh 写入下入内容 执行 sh calculate_size.sh http://example.com/some/dir/ 即可统计 http 文件服务器http://example.com/some/dir/ 中 dir 目录及其子目录下所有文件的大小。

    2024年02月15日
    浏览(59)
  • shell脚本-批量获取目录下所有文件的md5值、大小、inode值

    MD5的全称是Message-Digest Algorithm 5,它一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5值等同于文件的ID,它的值是唯一的。 如果文件已被修改,其MD5值将发生变化。 运行结果: 文件储存在硬盘上,硬盘的

    2024年02月09日
    浏览(44)
  • linux shell脚本函数

    目录 一、函数        1.传参 二、返回值        return 三、终止符         exit 四、实验                   一、函数         概念:函数是定义一个函数名,可以调用函数方法,完成便捷处理。         函数作用:    1.避免方法名重复。   2.将代码分割成一块一块,便

    2024年02月07日
    浏览(46)
  • Shell脚本函数应用

    记录 :429 场景 :Shell脚本函数应用,定义函数,函数调用,函数传参。 版本 :CentOS Linux release 7.9.2009。 1.普通函数 示例普通函数是没有入参和返回值。 1.1脚本 脚本名称:b2023051701.sh 脚本内容: 1.2执行与输出 执行命令:bash b2023051701.sh 输出结果: 2.函数使用return返回值 S

    2024年02月05日
    浏览(43)
  • shell脚本--函数

    目录 一:shell函数定义 1.函数的含义 2.函数的优点 3.函数的格式 4.函数返回值 (1)return输出 (2)echo输出  二:函数传参 1.情景一  2.情景二 3.情景三  4.情景四  三:递归函数  1.递归函数定义  2.通过递归函数实现阶乘 3.使用递归函数实现目录和文件的依次输出  4.案例实练

    2024年02月03日
    浏览(34)
  • BASH shell脚本篇4——函数

     这篇文章介绍下BASH shell中的函数。之前有介绍过shell的其它命令,请参考: BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 BASH shell脚本篇3——字符串处理 函数是代码重用的最重要方式。Bash函数可以定义为一组命令,在bash脚本中多次调用。bash函数使脚本更具可

    2024年02月07日
    浏览(37)
  • 运维Shell脚本小试牛刀(七):在函数文脚本件中调用另外一个脚本文件中函数|函数递归调用|函数后台执行

    运维Shell脚本小试牛刀(一) 运维Shell脚本小试牛刀(二) 运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解 运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi_蜗牛杨哥的博客-CSDN博客 Cenos7安装小火车程序动画 运维Shell脚本小试牛刀(五):until循环 运维Shell脚本小试牛刀

    2024年02月09日
    浏览(56)
  • shell脚本中main函数中$#获取不到脚本传入参数个数浅析

    Linux的shell脚本,有时候我们在运行shell脚本时会给脚本传入参数,出于逻辑上的严谨,在脚本中可能会做一些逻辑判断或处理,例如判断脚本传入参数的个数。一般我们会用$#获取传入参数的个数,假如,我们在shell脚本的main函数中去判断脚本传入参数的个数,类似如下所示

    2024年03月14日
    浏览(99)
  • 【Linux命令行与Shell脚本编程】第十六章 Shell函数

    脚本函数基础 函数返回值 在函数中使用变量 数组变量和函数 函数递归 创建库 在命令行中使用函数 可以将shell脚本代码放入函数中封装起来,这样就能在脚本的任意位置多次使用. 函数是一个脚本代码块,可以并在脚本中的任何位置重用它。当需要在脚本中使用该代码块时

    2024年02月14日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包