• SHELL函数处理


    SHELL函数调用分为两种:

    第一种方式,有点像C语言调用函数的风格,直接把函数的执行结果复制给变量!不过,这个赋值过程和C语言的函数赋值是不一样的!

    C语言中,函数调用,是将函数的返回值返回给被调函数,如:

    fun()
    {
         return (1+2);
    }
    main()
    {
        a = fun();
        ...............
    }

    这实际上是将函数的返回值,也就是return的值复制给变量a!可是,大家注意:shell中函数调用的第一种方式,是将标准输出传递给主程序的变量,而不是返回值!请看以下程序 test.sh:

    #!/bin/sh 
    
    check_user()
    {
        n=`cat /etc/passwd | cut -d ":" -f 1 | grep "^$1$" -Rn | cut -d ":" -f 1`
        echo $n
        #这里是使用echo语句,将结果输出到标准输出上,所以在主程序中可以使用变量接收
    }
    
    userinfo()
    {
        userinfo=`head -$1 /etc/passwd | tail -1 | cut -d ":" -f 3,4`
        echo $userinfo
    }
    
    while true
    do
            read username
            m=`check_user $username`
            #使用变量接收函数check_user传递的值
    
            if [ -n "$m" ]
            then
               userinfo $m
               exit
            else
                echo "$username is not exit!" 
            fi
    done

    测试代码:

    [qiu.li@l-tdata1.tkt.cn6 ~]$ ./test.sh 
    dd
    dd is not exit!
    qiu.li
    40006:1004

    而函数的第二种调用方式,是使用$?来接收上一程序的返回值状态,也就是return返回的值。下面程序中,if判断后,return 0 或者 1,在这里,我们就可以使用$?接收return的值,然后存储下来,继而进行下一步的判断!

    check_user()
    {
        n=`cat /etc/passwd | cut -d ":" -f 1 | grep -n "^$1$"| cut -d ":" -f 1`
        if [ -z "$n" ]
        then
            return 0
        else
            return 1
        fi
    }
    
    show_userinfo()
    {
        userinfo=`head -$n /etc/passwd | tail -1 | cut -d ":" -f 1,3,4`
        echo $userinfo
    }
    
    echo  "input username : "
    read username
    
    check_user $username
    num=$?
    
    if [ $num -eq 0 ]
    then
        echo "The user '$username' is not exist."
        exit
    else
        show_userinfo $n
    fi

    上面两个程序的执行结果是一样的,但是要注意着两种函数的不同调用方式,以及其返回给主调程序的到底是什么。明白了这一点,才能准确知道到底使用何种方式接收返回值! 

  • 相关阅读:
    POJ1239
    HDU 2829 四边形不等式优化
    返回数字二进制的最高位位数o(n)
    矩阵快速幂 模板
    HDU4718 The LCIS on the Tree(LCT)
    HDU4010 Query on The Trees(LCT)
    HDU3487 Play With Chains(Splay)
    CF444C DZY Loves Colors
    HDU4836 The Query on the Tree(树状数组&&LCA)
    HDU4831&&4832&&4834
  • 原文地址:https://www.cnblogs.com/liqiu/p/4113857.html
Copyright © 2020-2023  润新知