Shell函数使用方法

Posted Beng Dou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell函数使用方法相关的知识,希望对你有一定的参考价值。

  shell函数是一组命令集或语句组成一个可用块。利用函数可以简化脚本编写。函数要求先定义再使用,调用函数时直接使用函数名即可。这里主要介绍shell编程中如何定义函数、如何使用函数、如何向函数传入参数、函数体如何获取输入参数并使用、函数返回方式和内容等内容。

函数定义

 函数由函数名和函数体两部分组成。形式如下:

function_name()
{
  function_body
}

 也可以在函数名前面加上function关键字。如下

fucntion function_name(){
  function_body
}

下面我们看一个shell函数最简单的实例,打印指定输出内容:

print_msg() <-- 定义函数,函数名为print_msg
{
  echo "Hello World"  <-- 函数体
}

 这里,print_msg就是函数名,echo行就是函数体。很简单吧。但是如果你想要函数打印你指定输出内容呢?这时就需要考虑向函数传递指定参数了。

向函数传递参数

  我们先将上述指定输出固定内容的print_msg函数进行扩展,实现可以按照指定内容输出的函数。代码如下:

#!/bin/bash

prompt_msg()  <-- 定义函数,函数名为prompt_msg
{
  msg_level=$1 <-- 获取函数输入的第一个参数,赋值给变量msg_level
  msg_info=$2  <-- 获取函数输入的第二个参数,赋值给变量msg_info
   
  echo "${msg_level}: ${msg_info}"
}

prompt_msg "ERROR" "The Directory not exist"  <-- 使用函数名prompt_msg调用函数,向函数传递2个参数,分别为"Error"、"The Directory not exist"

 这里,我们注意到函数体中出现了$1、$2的特殊字符。这代表什么含义?这里也是本章节想要描述的主要内容。下面我们看下函数中常用的类似$1、$2的特殊字符以及它们的含义和使用方法。 

 $0:表示函数名。

 $1、$2、$3...$n:表示传入函数的第1个参数、第2个参数、第3个参数...第n个参数。

 $#:表示传入参数个数的总数。

 [email protected]:表示"$1"、"$2"、"$3"..."$n",每个变量都是独立的,常用。

 $*:表示"$1 $2 $3...$n",每个变量不是独立的。

 下面我们就针对$0、$1、$#、[email protected]、$*等特殊符号进行逐一介绍。利用这些符号,我们继续完善上述的例子。

#!/bin/bash

prompt_msg()  <-- 定义函数,函数名为prompt_msg
{
  if [ $# -ne 2 ];then <-- $#表示传入参数总数,即如果参数总数不等于2,则函数报错退出
    echo "$0"   <-- 输出函数名
    echo "[email protected]"   <-- $#输出所有传入函数的参数
    echo "please input 2 parameters,please check"
    exit 1
  fi
  
  msg_level=$1 <-- 获取函数输入的第一个参数,赋值给变量msg_level
  msg_info=$2  <-- 获取函数输入的第二个参数,赋值给变量msg_info
  
   
  echo "${msg_level}: ${msg_info}"
}

prompt_msg "ERROR" "The Directory not exist"  <-- 使用函数名prompt_msg调用函数,输出Error:The Directory not exist

使用函数返回值

  通常使用函数完成一段逻辑处理或者判断函数返回值是否为真完成下一步处理。函数中通常使用return语句返回脚本处理的结果,0通常用于表示正确处理无错误返回,非0表示处理异常返回。下面我们通过一个判断是否为奇数的函数来了解下使用方法。代码如下:

#!/bin/bash

is_odd()
{
  num=$1
  if [ num%2 -ne 0 ];then
    return 0
  else
    return 1
  fi
}

number=3
is_odd "${number}"
if [ $? -ne 0 ];then  <-- $?表示上一条命令执行返回的。
  echo "$number is odd"
else
  echo "$number is not odd"
fi

  说明:is_odd函数使用return语句返回判断结果。下一个命令通过$?获取函数的输出返回值进行判断。记住$?的使用方法,非常常用。

总结

 使用函数可以节省大量的脚本编写时间,也可以使脚本结构更加清晰。对于经常使用到的逻辑语句可以整理成函数保存到文件中,可以方便后续脚本编写。

 

以上是关于Shell函数使用方法的主要内容,如果未能解决你的问题,请参考以下文章

逆向及Bof基础实践

201555332盛照宗—网络对抗实验1—逆向与bof基础

20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础

20155307刘浩《网络对抗》逆向及Bof基础

20155311高梓云《网络对抗》逆向及Bof基础

20145301赵嘉鑫《网络对抗》逆向及Bof基础