敞开成长之旅!这是我参与「日新计划 12 月更文挑战」的第11天,点击查看活动概况

通过前几篇文章的学习,慢慢的不可避免的,就要接触到函数.果不其然,在shell之批量操作(二)这篇文章中,我也是第一次运用了函数.更有条理的来完结,咱们想要的成果.既然都用到了,那这里就好好的学习一下吧.

您能在这里看到啥

  1. 啥是函数
  2. 函数传参即回来值
  3. 函数变量效果范围
  4. 运用其他文件函数

啥是函数

  1. 自己的了解

    函数其实就是代码重复运用和最小功用集的代码块.区别在于,各个言语界说函数的格局有所不同.这一点我不太确认.一切言语的函数是不是都需求调用才能够履行,假如您知道,能够在评论里告知一下.

  2. shell中的函数

    • 想看一下.在shell之批量操作(二)这里咱们是怎样创立函数的.如下所示

      # 批量移动txt文件
      mvtxt() {
          target="*.txt"
          find "$project_path" -name "$target" -print0 | while IFS= read -r -d '' file; do
              echomsg "$file"
              mv "$file" "$project_demo_path/a"
          done
      }
      mvtxt
      

      从上面的代码里,咱们能够看到最简单的函数的雏形.也能够发现,函数里,其实是把本来在函数外面的shell指令.归纳到了函数里.然后咱们能够得到定论.

      函数是由shell指令组成的代码块.但是它是能够独立运转的,由于它不是一个独自的进程,必须依靠在shell程序里.得到调用才会履行函数里的代码块.

  3. 函数格局

    • 默许函数格局

      [function] funname [()]
      {
          函数体...
          [return 参数];
      }
      

      说明:

      1. []包裹的内容,代表是可选的.
      2. 牢记假如在funname后面你不运用().就要必定运用function,如下所示
        function test {}
        
    • 函数事例

      • 省事语法
        test(){
          echo "test"
        }
        test(){
            return "test"
        }
        
      • 规范语法
        function test() {
           echo "test"
        }
        function test {
           return "test"
        }
        

函数传惨即回来值

通过上面的整理,咱们也算是初步了解,怎样界说函数.下面咱们学习一下,怎样调用函数,以及怎样接受函数回来值

  • 函数调用

    在调用函数的时分,分为两种情况.如下所示

    • 无参数

      test

    • 有参数

      假如需求多个参数,每个参数之间用空格分隔.如下所示:

      test p1 p2 p3 p4

    如上所示,咱们能够得到定论,调用函数只需求写函数名 + 参数 即可.

  • 函数参数

    在上面的举例中,假如调用函数有参数.那咱们在函数里,怎样获取参数呢.

    • 获取一切参数

      能够运用$@来获取函数的一切参数.如下所示:

      test() {
          for var in "$@";do
              echo "$var"
          done
      }
      test "1" "2" "3" "4"
      输出成果: 1 2 3 4
      
    • 获取单个参数

      能够运用$n来获取第n个参数.如下所示:

        test() {
          echo "$2"
      }
      test "1" "2" "3" "4"
      输出成果: 2
      
    • 获取参数个数

      能够运用$#来获取参数的个数.如下所示:

      test() {
          echo "$#"
      }
      test "1" "2" "3" "4"
      输出成果: 4
      
  • 函数值回来

    • 回来字符串
      # 假如只是回来字符串,需求如下运用
      get_test() {
          echo "test"
      }
      # 获取函数回来
      RES=$(get_test)
      echo "$RES"
      # 输出如下所示:
      test
      
    • 回来值
      function test() {
         return "$1"
      }
      # 获取函数回来
      test 1
      a=$?
      echo "$a"
      # 输出成果
      1
      

函数变量效果范围

shell文件中变量是大局环境.假如你想让变量限定在函数内部有效,需求运用local指令

test() {
    local a
    a=1
    echo "$a"
}
a=10
test
echo "$a"
# 输出成果
10

运用其他文件函数

在咱们的功用不断完善的过程中,不能一直把一切的功用都写在一个sh文件中,这样就需求咱们依据功用来创立不同sh文件.这就呈现了一个新的的问题,咱们应该怎样运用其他sh文件中参数或许界说的函数呢.那就引出了source指令.下面简单说一下source指令

  • source指令

    • source指令称为点指令,是bash的内部指令
    • 功用: 使shell读入指定sh文件,并依次履行文件中的一切句子
    • 用法
      • source ts.sh
      • . ts.sh
  • source运用

    • 引进文件只用一个函数或许文件没有函数,

      当引进的文件没有函数或只有一个函数,就能够直接运用source即可.代码如下所示
      创立ts.sh文件

      ts.sh
      echo "ts"
      test() {
        echo "test"
      }
      

      创立主体文件

      tes.sh
      source ./ts.sh
      echo "tes"
      test
      

      当咱们履行tes.sh文件的时分.ts.sh文件就会也被履行.

      输出如下
      ts
      tes
      test
      
    • 引进文件有一个或多个函数

      当引进的文件有多个函数的时分,就需求咱们运用chmod a+x指令.来赋予当前脚本能够履行文件中的一切函数.代码如下所示

      创立ts.sh测试文件

      ts.sh
      test1() {}
      test2() {}
      test3(){}
      

      创立tes.sh主体文件

      source ./ts.sh
      chmod a+x ts.sh
      # 这样咱们就能够调用一切函数了
      test1
      test2
      test3
      

系列文章

  • shell 通用指令之find
  • shell 通用指令之ls
  • shell 通用指令之文件权限
  • shell 通用指令之流程操控(一)
  • shell 通用指令之流程操控(二)
  • shell 通用指令之字符串操作
  • shell之批量修改内容
  • shell之批量操作(一)
  • shell之批量操作(二)

学习文章

shell 函数