1.12函数和参数

我们可以创建执行特定任务的函数,也可以创建能够接受参数的函数

1)定义函数

function fname()

{

  statements;               

或者

fname()

{

  statements;

}

2)只需要使用函数名就可以调用某个函数

$ fname; #意思是执行函数

3)参数可以传递给函数,并由脚本进行访问:

$ fname arg1 arg2 ;#传递参数

eg:在函数fname中,包含了各种访问函数参数的方法

fname()

{

  echo $1,$2;#访问参数1和参数2

  echo "$@";#以列表的方式一次性打印所有参数

  echo "$*";#类似于$@,但是参数被作为单个实体

  return 0;#返回值

类似的,参数可以传递给脚本并通过script:$0(脚本名)访问。??????

$1和$2分别是第一个和第二个参数,以此类推。

"$@"被扩展成“$1” "$2" "$3"等

“$*”被扩展成“$1c$2c$3c”,其中c是IFS的第一个字符。

"$@"要比“$*”用的多。由于“$*”将所有的参数当做单个字符串,因此它很少被使用。

注意函数在脚本中定义之后,还需要调用,如果该函数需要参数,则还需要在函数名后面加上参数!!!!

补充内容:

1、递归函数

在bash中,函数同样支持递归(可以调用自身的函数),如

F()

{

  echo $1;

  F hello;

  sleep1;

}

Fork炸弹

:() {:|:&};:

这个递归函数能够调用自身,不断地生成新的进程,最终造成拒绝服务攻击。函数调用前的&将子进程放入后台。这段危险的代码会分支出2大量的进程,因而称为Fork炸弹。理解上面可参考http://en.wikipedia.org/wikiFork_bomb。

可以通过修改配置文件/etc/security/limits.conf来限制可生成的最大进程数来避开这枚炸弹。

2、导出函数

函数也能像环境变量一样用export导出,如此一来,函数的作用域就可以扩展到子进程中,如

export -f fname

3、读取命令返回值(状态)

通过下面的方式获取命令和返回值

cmd;

echo $?;

$?会给出命令cmd的返回值。

返回值被称为退出状态。它可用于分析命令执行成功与否。如

#!/bin/bash

CMD="command"#command指代你要检测退出状态的目标命令

$CMD

if [ $? -eq 0]

then 

     echo "$CMD executed successfully"

else

   echo "$CMD executed unsuccessfully"

fi

4、向命令传递参数

命令的参数能够以不同的格式进行传递。假设-p、-v是可选项,-k、-N是另一个可以接受数字的选项,同时该命令还接受一个文件名作为参数,那么,它有如下几种执行方式:

$command -p -v -k 1 file

$command -pv -k 1 file

$command -pvk 1 file

$command file -pvk 1

 

posted on   gary_123  阅读(457)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】

导航

< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示