精华内容
下载资源
问答
  • 3、函数返回值,只能通过$? 系统变量获得,直接通过=只能获得空值。根据上一条的理解,因为函数是一个命令,而在shell获得命令返回值,都需要通过$?获得。 转载于:...

    语法:

    [ function ] funname [()]

    {

        action;操作

        [return $cation;]返回结果

    }

    说明:

    1、可以带function fun()  定义,也可以直接fun() 定义,不带任何参数。

    2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟变量


    $vim test.sh
    function ADD()
    {
            echo"a==" $1
            echo"b==" $2
            return $(($1+$2))
    }
    
    sum=$(ADD $1 $2)
    echo $sum
    $source test.sh
    0
    $ADD 100 20
    100
    20
    120

    从上面这个例子我们可以知道:

    1、必须在调用函数地方之前,声明函数,shell脚本是逐行运行。不像其它语言一样先预编译再执行。因此必须在使用函数前先声明函数。

    2、sum=$(ADD $1 $2);  通过这种调用方法,我们清楚知道,在shell 中 单括号里面,可以是:命令语句。 因此,我们可以将shell中的函数,看作是定义一个新的命令,它是命令,因此 各个输入参数直接用 空格分隔。 还需知道,命令里面获得参数方法可以通过:$0…$n得到。 $0代表函数本身。

    3、函数返回值,只能通过$? 系统变量获得,直接通过=只能获得空值。根据上一条的理解,因为函数是一个命令,而在shell获得命令返回值,都需要通过$?获得。



    转载于:https://my.oschina.net/u/2309138/blog/373088

    展开全文
  • linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。 一、定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int...
  • linux shell 自定义函数(定义、返回值、变量作用域)介绍 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。   一、定义shell函数(define ...
    
    

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。

     

    一、定义shell函数(define function)

    语法:

    [ function ] funname [()]

    {

        action;

        [return int;]

    }

    说明:

    1、可以带function fun()  定义,也可以直接fun() 定义,不带任何参数。

    2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255

     

    实例(testfun1.sh):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #!/bin/sh
      
     fSum 3 2;
     function fSum()
     {
         echo $1,$2;
         return $(($1+$2));
     }
     fSum 5 7;
     total=$(fSum 3 2);
     echo $total,$?;
                      
    sh testfun1.sh
    testfun1.sh: line 3: fSum: command not found
    5,7
    3,2
    1
    5

     

    从上面这个例子我们可以得到几点结论:

    1、必须在调用函数地方之前,声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译。一次必须在使用函数前先声明函数。

    2、total=$(fSum 3 2);  通过这种调用方法,我们清楚知道,在shell 中 单括号里面,可以是:命令语句。 因此,我们可以将shell中函数,看作是定义一个新的命令,它是命令,因此 各个输入参数直接用 空格分隔。 一次,命令里面获得参数方法可以通过:$0…$n得到。 $0代表函数本身。

    3、函数返回值,只能通过$? 系统变量获得,直接通过=,获得是空值。其实,我们按照上面一条理解,知道函数是一个命令,在shell获得命令返回值,都需要通过$?获得。

     

    二、函数作用域,变量作用范围

    先我们看一个实例(testfun2.sh ):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #!/bin/sh
     
    echo $(uname);
    declare num=1000;
     
    uname()
    {
        echo "test!";
        ((num++));
        return 100;
    }
    testvar()
    {
        local num=10;
        ((num++));
        echo $num;
     
    }
     
    uname;
    echo $?
    echo $num;
    testvar;
    echo $num;
                    
                                   
    sh testfun2.sh
    Linux
    test!
    100
    1001
    11
    1001

    我们一起来分析下上面这个实例,可以得到如下结论:

    1、定义函数可以与系统命令相同,说明shell搜索命令时候,首先会在当前的shell文件定义好的地方查找,找到直接执行。

    2、需要获得函数值:通过$?获得

    3、如果需要传出其它类型函数值,可以在函数调用之前,定义变量(这个就是全局变量)。在函数内部就可以直接修改,然后在执行函数就可以读出修改过的值。

    4、如果需要定义自己变量,可以在函数中定义:local 变量=值 ,这时变量就是内部变量,它的修改,不会影响函数外部相同变量的值 。

    这些,是我在工作中,对linux ,shell 函数使用一些经验总结,有没有提到地方,欢迎交流!

    分类: linux

    标签: linuxshell


    来源:http://www.cnblogs.com/chengmo/archive/2010/10/17/1853356.html

    展开全文
  • 编写shell脚本过程中,我们经常会自定义一些函数,并根据函数返回值不同来执行相应的流程,那么我们如何来获取函数返回值呢? 首先shell中调用函数有两种方式: 第一种:value=`function_name [arg1 arg2 ...
    编写shell脚本过程中,我们经常会自定义一些函数,并根据函数的返回值不同来执行相应的流程,那么我们如何来获取函数的返回值呢?
    
    首先shell中调用函数有两种方式:
    第一种:value=`function_name [arg1 arg2 ......]`
    或
    第二种:function_name  [arg1 arg2 ......]
    echo $?
    
    

     

      这两种有什么区别呢?

    
    
    举个例子来说:
    
    
    [root@zejin240 ~]# cat test.sh 
    #!/bin/sh
    function aaa()
    {
       if [ "$1" -eq "1" ];then
         return 0
       elif [ "$1" -eq "2" ];then
         exit 1
       elif [ "$1" -eq "3" ];then
         echo "3" 
         echo "31" >&2 #no space after >
         echo "32"
       elif [ "$1" -eq "4" ];then
         a wrong commend
       fi
    }
    
    echo "begin"
    value1=`aaa 1`
    echo $?
    echo "value1=$value1"
    echo '---------------'
    
    value2=`aaa 2`
    echo $?
    echo "value2=$value2"
    echo '---------------'
    
    value3=`aaa 3`
    echo $?
    echo "value3=$value3"
    echo '---------------'
    
    value4=`aaa 4`
    echo $?
    echo "value4=$value4"
    
    echo "end"
    
    输出如下:
    [root@zejin240 ~]# sh test.sh 
    begin
    0
    value1=
    ---------------
    1
    value2=
    ---------------
    31
    0
    value3=3
    32
    ---------------
    test.sh: line 14: a: command not found
    127
    value4=
    ---------------
    end
    

    可以看到,value1 value2 value3 value4的值取决于函数中的标准输出的值,即函数体中的echo内容,注意value3的值,因为我们将31的输出定向到了标准错误输出,而不会出现在value3的值中。 而我们用$?获得的函数执行状态值时,可以看到,没有加return和exit的直接返回它上一条命令执行的状态值,所以echo "32"可以正常返回,所以$?的值为0,而a wrong command 由于不能正常执行,而返回了一个非0的整数。
    好了,那么让我们来看下面一个命令:

    [root@zejin240 ~]# /opt/lamp/mysql/bin/mysql -h192.168.1.240 -uDBA -p123 -ss -e 'show variables like "version"'
    Warning: Using a password on the command line interface can be insecure.
    version    5.6.16-log
    
    
    输出中出现了一个让人有点讨厌的警告,但是呢,当我把命令的值赋与变量aa时

    [root@zejin240 ~]# aa=`/opt/lamp/mysql/bin/mysql -h192.168.1.240 -uDBA -p123 -ss -e 'show variables like "version"'`
    Warning: Using a password on the command line interface can be insecure.
    [root@zejin240 ~]# echo "$aa"
    version    5.6.16-log
    
    

    你会发现,变量aa的值并没有包含那个警告信息。为什么呢,看了上面的分析能否知道原因呢 原因是这样子的,虽然在界面显示出来了警告信息,但这个警告信息是被重定向到标准错误输出的,并不会被赋值给变量aa,我是怎么知道的呢 我们可以这样做个实验:
    
    
    [root@zejin240 ~]# aa=`/opt/lamp/mysql/bin/mysql -h192.168.1.240 -uDBA -p123 -ss -e 'show variables like "version"' 2>&1 `
    [root@zejin240 ~]# echo "$aa"
    Warning: Using a password on the command line interface can be insecure.
    version    5.6.16-log
    
    
    
    
    
    我将标准错误输出重定位到标准输入,你看,这变量aa的值就包含警告信息了吧。
    当然我们也可以将标准输出重定向到空设备中:
    
    
    [root@zejin240 ~]# aa=`/opt/lamp/mysql/bin/mysql -h192.168.1.240 -uDBA -p123 -ss -e 'show variables like "version"' >/dev/null 2>&1`
    [root@zejin240 ~]# echo "$aa"

    
    
    
    你看,aa的值就为空了吧。(即使是定向到某个文件中输出也为空)

    
    
    总结:调用函数返回值时,不管方法一还是方法二,echo $?的值是一样的。而方法一中,即value=`function_name [arg1 arg2 ......]`,value的取值取决于调用命令的标准输出,没有标准输出即为空,我们一般用return值来返回函数的最后执行状态,(一般不用exit来返回,因为它直接调用时会直接结束整个shell,当然如果有特殊目的可以这样做),用echo来输出给到变量的值。

     

    转载于:https://www.cnblogs.com/zejin2008/p/5149225.html

    展开全文
  • shell中的自定义函数返回值

    千次阅读 2018-12-05 04:19:20
    shell中的自定义函数 直接看截图和代码吧,一目了然! #!/bin/bash #如下语句会报错,因为在调用test1函数之前要先声明test1函数 #也就是说,函数的调用语句要放在函数的声明的后面(调用函数语句的位置要...

    shell中的自定义函数

    直接看截图和代码吧,一目了然!

    #!/bin/bash
    
    #如下语句会报错,因为在调用test1函数之前要先声明test1函数
    #也就是说,函数的调用语句要放在函数的声明的后面(调用函数语句的位置要放在函数声明语句的位置的后面)
    #test1 20 30
    
     function test1()
     {
        echo $1和$2
         return $(($1+$2))
     }
     test1 50 70
    #将命令的结果赋给变量total
     total=$(test1 10 66)
    #echo "运行命令的结果是$total"
    #函数返回值,只能通过$?系统变量获得,直接通过=,获得是空值,可以把函数理解成一个命令
    #在shell中获得命令返回值,都需要通过$?获得
    #echo $?
    echo $total,$?
    echo "运行命令的结果是$total"
    :<<!
    
    我这里是多行注释
    将命令的执行结果赋给变量,有2种写法,如下
    1)A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量 A
    2)A=$(ls -la)
    
    !
    
    function test2() {
     echo "江西省赣州市于都县"
    }
    #将命令的结果赋给变量,举例子,如下:
    MESSAGE=$(test2)
    echo "运行命令的结果是$MESSAGE"
    
    function test3() {
            dirname /root/shell/bbb.txt
    }
    #将命令的结果赋给变量,举例子,如下:
    MESSAGE2=`test3`
    echo "运行命令的结果是$MESSAGE2"
    
    
    
                                           

    总结:

    1 必须在调用函数地方之前,声明函数,shell脚本是逐行运行,不会像其它语言一样先预编译一次,必须在使用函数前先声明函数

    2 total=$(fSum 3 2);  通过这种调用方法,我们清楚知道,在shell 中 单括号里面,可以是:命令语句。 因此,我们可以将shell中函数,看作是定义一个新的命令,它是命令,因此 各个输入参数直接用 空格分隔。 一次,命令里面获得参数方法可以通过:$0…$n得到。 $0代表函数本身

    给大家回顾一下以前的知识,将命令的执行结果赋给变量,看我这篇文章也可以

    如下图:

    将命令的返回值赋给变量(重点)

    2种写法

    1)A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量 A
    2)A=$(ls -la)

    3 函数返回值,只能通过$? 系统变量获得,直接通过=,获得是空值。其实,我们按照上面一条理解,知道函数是一个命令,在shell获得命令返回值,都需要通过$?获得

    如果不知道$?是什么,那就回顾一下以前的知识,看我这篇文章也可以

    预定义变量

    基本介绍

    就是 shell 设计者事先已经定义好的变量,可以直接在 shell 脚本中使用

    基本语法

    $$ (功能描述:当前进程的进程号(PID))
    $! (功能描述:后台运行的最后一个进程的进程号(PID))
    $? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了)

    展开全文
  • 一、定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。 2、参数返回,可以显示加:...
  • linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。 一、定义shell函数(define function) 语法: [ function ] funname [()] { action; ...
  • linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。 一、定义shell函数(define function) [ function ] funname [()]{action;[returnint;]...
  • linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。 一、定义shell函数(define function) 语法: [ function ] ...
  • Shell自定义函数

    2019-12-06 19:49:30
    基本语法 #函数定义 function funname() ...(2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值,return后跟数值n(0-255)。 例子 计算两个数的...
  • 1、函数shell中,函数也分为系统函数和用户自定义函数。而系统函数说白了,就是linux命令2、系统函数常见的系统函数有很多,比如文件类的、目录类等等。这里以几个命令做个案例2.1、案例在当前目录创建test目录,...
  • linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。 一、定义shell函数(define function) 语法: [ function ] funname [()] { action; ...
  • shell 自定义函数

    2019-10-07 13:01:15
    Shell 函数定义的语法格式如下: function name() { statements [return value] } 对各个部分的说明: function是 Shell 中的关键字,专门用来定义... return value表示函数返回值,其中 return 是 Shell ...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 127
精华内容 50
热门标签
关键字:

shell自定义函数返回值