Board logo

标题: linux基础(二十)----linux编程基础----子程序----函数(2) [打印本页]

作者: look_w    时间: 2019-5-11 13:39     标题: linux基础(二十)----linux编程基础----子程序----函数(2)

给函数传递参数
    例如,假设要写一个验证用户ID和密码( password)的函数,这个函数除了ID和密码之外,还包括所有验证用户身份所必需的命令和信息。在每次调用函数时,除了ID和密码可以不同之外,其余各部分都应相同。
    如果读者想在程序中调用该函数,就把ID和密码作为参数传递给函数,linux把它们赋给某些变量。在这个程序中,这两个变量分别是
1和
2。每一个数字都指向它所对应的传递来的参数。注意,由于Linux在这里期望的是数字,所以不能用其他的字符如varl来取代这些变量中的数字的。
    因此,可以用变量来取代函数定义中的信息。例如,ID是传递给函数的第一个参数,密码是传递给函数的第二个参数。因此,在函数定义中,当需要引用ID时就可以用变量$1,需要引用密码时可以用变量$2。

请看下面的例子:

#!/bin/bash
clear
function verify
{
if [$1 -eq  "Bob" ]&&[$2 -eq  "555"]
      then
        echo "Verified"
    eise
        echo "Rejected"
fi
}
verify  Bob 555





验证传递给函数的参数的个数
    如果程序不能给一个函数传递它所需要的全部信息,可能会遇到麻烦。例如,一个函数可
能要依据程序提供的某些信息来进行某种计算操作。不过,如果程序根本不给函数传递什么
信息,也可能会出现错误。

   变量$#包含了传递给函数的参数的个数。通过对变量$#的值和函数实际需要的参数的
个数进行比较,就可以决定是否阻止函数处理传递来的信息。请看下面的示例:

    #!/bin/bash
    clear
    function verify
    {
      if [$# -ne 2]
            then
              echo "Wrong number of arguments!"
         else
            if[$1  -eq   "Bob"] &&[$2 -eq "555"]
              then
                  echo "Verified"
            else
                   echo  "Rejected"
             fi
       fi
     }
   verify Bob 555






与子程序共享函数
    子程序同样也可以使用程序员建立的函数。只要把子程序设想成是程序中的一个程序即可。
     我们建立一个用函数验证用户ID和密码的程序。但这次却想在另一个不含有该函数的程序中使用该函数。当然,不是把该函数复制到第二个程序中,而是让第二个程序(子程序)也能分享第一个程序中的函数。
    我们可以用export命令输出函数,实现子程序之间共享函数。然后,就可以在子程序中调用该子函数。请看下面的     例子:

#!/bin/bash
clear
function verify
{
  if [$# -ne  2]
        then
          echo "Wrong number of arguments!"
        else
          if[$1  -eq  "Bob"]&&[$2 -eq  "555"]
                then
                      echo "Verified"
                 else
                       echo "Rejected"
           fi
  fi
}
export verify
subprogram1

现在对加在函数定义之后的两行说明如下:
1.在函数定义结束符“}”之后,用export命令来说明子程序subprogram1可以访问函数
  verify。
2.程序中最后一行是调用子程序subprogram1。注意,子程序subprogram1并没有包含函
  数verify的定义,但子程序可以调用它,因为在调用予程序之前已用export命令说明了
  输出该函数verify。
子程序subprogram1如下:

#!/bin/bash
clear
verify "Bob"  "555"




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0