Shell编程-函数

时间:2020-02-23 14:45:08  来源:igfitidea点击:

在本教程中,我们将学习Shell编程中的函数。

什么是函数?

函数是为特定任务编写的代码块。

例如,简单兴趣函数将具有基于某些输入数据计算简单兴趣的代码。

Shell中的函数类似于其他编程语言(如C)中的子例程或者过程。

函数语法

以下是函数的语法。

function functionName()
{
  # some code goes here...
}

其中," functionName"是函数的名称。
名字之后,我们有左括号"()"。

函数的主体从" {"开始,在"}"结束。

在左花括号和右花括号" {}"中,我们具有函数的主体。

下面给出了创建函数的另一种方法。

functionName()
{
  # body of the function
}

函数名称

在命名函数时,我们遵循给定的规则。

  • 名称必须以字母(a-z或者A-Z)开头或者下划线_
  • 之后,我们可以使用字母(a-z和A-Z),下划线_和数字(0-9)
  • 不要在函数名称中放置空格
  • 不要使用诸如echo,printf等特殊关键字来命名函数

Example#01:编写一个Shell脚本以使用函数打印" Hello World"

在下面的示例中,我们将创建greetings函数。

#!/bin/sh

# create a function
function greetings()
{
  echo "Hello World"
}

# call the function
greetings
$sh example01.sh 
Hello World

将参数传递给函数

我们还可以将参数传递给shell脚本中的函数,并使用$1,$2,$3 ...等变量访问它们,其中,$1指向第一个参数,$2指向第二个参数,依此类推。

Example#02:编写一个Shell脚本来创建一个接受用户名并显示问候消息的函数

在下面的示例中,我们将创建" greetings"函数,该函数接受一个参数并显示问候消息。

#!/bin/sh

# create a function
greetings() {
  echo "Hello "
}

# call the function
greetings "theitroad"
$sh example02.sh 
Hello theitroad

Example#03:使用用户输入的名称编写一个Shell脚本以打印问候消息

在此示例中,我们将首先从用户那里获取名称,并将其保存在变量" name"中。

#!/bin/sh

# function
greetings() {
  echo "Hello "
}

# take user name
printf "Enter your name: "
read name

# call the function
greetings "$name"
$sh example03.sh 
Enter your name: theitroad
Hello theitroad

返回码

我们使用" return"命令从函数返回值。

Example#04:编写一个Shell脚本来创建一个以数字作为参数并找到平方的函数。

成功返回0,否则返回1

为此,我们将创建" square"函数,该函数将数字作为参数。

#!/bin/sh

# function
square() {

  # if argument missing
  if [ -z "" ]
  then
    return 1  # return error code
  fi
  
  # assign argument to variable n
  n=""

  # find square
  result=`expr "$n * $n" | bc -l`

  return 0    # return success code
}

# take user input
printf "Enter a number: "
read num

# call the function
square "$num"

# save the returned code from the above function call
returnCode=$?

if [ $returnCode -eq 0 ]
then
  # display the result
  printf "Square of %d = %d\n" "$num" "$result"
elif [ $returnCode -eq 1 ]
then
  printf "Error Code: $returnCode Error: Number missing!\n"
else
  printf "Error Code: $returnCode Error: Unknown!\n"
fi
$sh example04.sh 
Enter a number: 5
Square of 5 = 25

$sh example04.sh 
Enter a number: 
Error Code: 1 Error: Number missing!

函数返回的值使用$来访问,因此,我们将其用于将返回值保存在变量$returnCode中。

注意!可以从脚本文件内部的函数外部访问" square"函数内的变量" result"。

因此,即使结果变量在平方函数内部,它也像全局变量一样。
这与我们从其他编程语言(例如C,C ++,Java等)中了解到的不同,因为不能直接从外部访问函数内部定义的变量。

Example#05:编写一个Shell脚本以根据用户输入来计算简单兴趣

#!/bin/sh

# simple interest function
simpleInterest () {
  p=""
  r=""
  t=""
  si=`expr "($p * $r * $t)/100" | bc -l`
}

# take user input
printf "Enter Principal: "
read pr

printf "Enter Rate [0-100]: "
read rt

printf "Enter Time [in years]: "
read tm

# call function
simpleInterest $pr $rt $tm

printf "Simple Interest: %.3f\n" "$si"
$sh example05.sh 
Enter Principal: 100
Enter Rate [0-100]: 10
Enter Time [in years]: 2
Simple Interest: 20.000