`
m635674608
  • 浏览: 5027355 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Shell函数的7种用法介绍

阅读更多

1. 在shell文件内部定义函数并引用:

 

复制代码代码如下:

[~/shell/function]# cat factorial.sh 
#!/bin/bash
function factorial
{
factorial=1
for (( i=1;i <= $1;i++ ))
        do
        factorial=$[ $factorial * $i ]
        done
echo $1的阶乘是:$factorial
}
echo '程序名':$0,用于求阶乘
factorial $1
[~/shell/function]# ./factorial.sh 10

 

程序名:./factorial.sh,用于求阶乘
10的阶乘是:3628800

2.返回值

函数返回码是指函数最后一条命令的状态码,可以用于函数返回值
使用return命令手动指定返回值:

 

复制代码代码如下:

[~/shell/function]# cat return.sh 
#!/bin/bash
function fun1 {
  read -p "enter a: " a
  echo -n "print 2a: "
  return $[ $a * 2 ]
}
fun1
echo "return value $?"
[~/shell/function]# ./return.sh 
enter a: 100
print 2a: return value 200

 

由于shell状态码最大是255,所以当返回值大于255时会出错。

 

复制代码代码如下:

[~/shell/function]# ./return.sh 
enter a: 200
print 2a: return value 144

 

3.函数输出

为了返回大于255的数、浮点数和字符串值,最好用函数输出到变量:

 

复制代码代码如下:

[~/shell/function]# cat ./fun_out.sh 
#!/bin/bash
function fun2 {
  read -p "enter a: " a
  echo -n "print 2a: "
  echo $[ $a * 2 ]
}
result=`fun2`
echo "return value $result"
[~/shell/function]# ./fun_out.sh     
enter a: 400
return value print 2a: 800

 

4.向函数传递参数(使用位置参数):

 

复制代码代码如下:

[~/shell/function]# cat ./parameter.sh 
#!/bin/bash
if [ $# -ne 3 ]
then
    echo "usage: $0 a b c"
    exit
fi
fun3() {
    echo $[ $1 * $2 * $3 ]
}
result=`fun3 $1 $2 $3`
echo the result is $result
[~/shell/function]# ./parameter.sh  1 2 3
the result is 6
[~/shell/function]# ./parameter.sh  1 2
usage: ./parameter.sh a b c

 

5.全局变量与局部变量

默认条件下,在函数和shell主体中建立的变量都是全局变量,可以相互引用,当shell主体部分与函数部分拥有名字相同的变量时,可能会相互影响,例如:

复制代码代码如下:

[~/shell/function]# cat ./variable.sh    
#!/bin/bash
if [ $# -ne 3 ]
then
    echo "usage: $0 a b c"
    exit
fi
temp=5
value=6
echo temp is: $temp
echo value is: $value
fun3() {
    temp=`echo "scale=3;$1*$2*$3" | bc -ql`   
    result=$temp
}
fun3 $1 $2 $3
echo "the result is $result"
if [ `echo "$temp > $value" | bc -ql` -ne 0 ]
then 
    echo "temp is larger"
else
    echo "temp is still smaller"
fi
[~/shell/function]# ./variable.sh  12 3 2
temp is: 5
value is: 6
the result is 72
temp is larger

 

在这种情况下,在函数内部最好使用局部变量,消除影响。

 

复制代码代码如下:

[~/shell/function]# cat ./variable.sh 
#!/bin/bash
if [ $# -ne 3 ]
then
    echo "usage: $0 a b c"
    exit
fi
temp=5
value=6
echo temp is: $temp
echo value is: $value
fun3() {
    local temp=`echo "scale=3;$1*$2*$3" | bc -ql`   
    result=$temp
}
fun3 $1 $2 $3
echo "the result is $result"
if [ `echo "$temp > $value" | bc -ql` -ne 0 ]
then 
    echo "temp is larger"
else
    echo "temp is still smaller"
fi
[~/shell/function]# ./variable.sh  12 3 2
temp is: 5
value is: 6
the result is 72
temp is still smaller

 

6.向函数传递数组变量:

 

复制代码代码如下:

[~/shell/function]# cat array.sh 
#!/bin/bash
a=(11 12 13 14 15)
echo ${a[*]}
function array(){
  echo parameters : "$@" 
  local factorial=1
  for value in "$@"
  do
    factorial=$[ $factorial * $value ]
  done
  echo $factorial
}
array ${a[*]}
[~/shell/function]# ./array.sh 
11 12 13 14 15
parameters : 11 12 13 14 15
360360

 

7.函数返回数组变量

 

复制代码代码如下:

[~/shell/function]# cat array1.sh 
#!/bin/bash
a=(11 12 13 14 15)
function array(){
  echo parameters : "$@" 
  local newarray=(`echo "$@"`)
  local element="$#"
  local i
  for (( i = 0; i < $element; i++ ))
  {
    newarray[$i]=$[ ${newarray[$i]} * 2 ]    
  }
  echo  new value:${newarray[*]}
}
result=`array ${a[*]}`
echo ${result[*]}
[~/shell/function]# ./array1.sh 
parameters : 11 12 13 14 15 new value:22 24 26 28 30
 
 
http://www.jb51.net/article/57951.htm
分享到:
评论

相关推荐

    vb SHELL函数实例

    首先,了解SHELL函数的用法。SHELL函数的基本语法是: ```vb Shell "command", WindowStyle ``` 其中,“command”是要执行的命令或程序路径,WindowStyle则是指定程序窗口的显示方式,如隐藏运行(vbHide)、最小...

    shell 函数

    本文将详细解析Shell函数的基础概念、创建方法、参数传递、错误处理以及实际应用案例。 #### 一、Shell函数基础 Shell函数由关键字`function`或简单的`名称()`定义,其中`名称`是函数的名字,用于后续调用。例如,...

    VBShell函数用法参照.pdf

    VBShell函数用法参照.pdf

    Shell中的函数、函数定义、作用域问题介绍

    而Shell中函数的定义有两种方法,如下: 代码如下: function fname() {  statements; } 或 代码如下: fname() {  statements; } 注意,()内是没有参数的,它并不像C语言那样,在()里可以有参数

    linux shell自定义函数(定义、返回值、变量作用域)介绍

    #### 一、定义Shell函数 在Linux Shell中,用户可以定义自己的函数,以便在脚本中重复使用。这不仅提高了代码的可读性和可维护性,还使得脚本更加模块化。 ##### 语法格式: ```sh [function] funname [()] { ...

    详解shell 函数定义与调用

    由于Shell函数无法直接返回字符串,通常有两种变通方法: - 将函数的输出通过`echo`命令打印,然后用`$()`捕获: ```shell testFun() { echo "Success" } return_value=$(testFun) echo "$return_value" ``...

    shell 使用数组作为函数参数的方法(详解)

    在Shell脚本编程中,有时我们...通过这样的方法,你可以有效地在Shell函数中传递和处理数组,避免只传递数组第一个元素的问题。这在编写复杂的Shell脚本或工具时尤其重要,因为它允许你更灵活地组织和管理数据结构。

    shell脚本如何获取随机数random

    为了避免上述提到的并发问题,文章介绍了使用/dev/urandom来生成更安全的随机数种子的方法。/dev/urandom是一个提供伪随机数生成器的特殊文件,可以在每次需要时生成新的随机数序列。通过管道命令`tr -cd 0-9 | head...

    ksh 基础知识 shell简介 变量数组 控制结构 函数 调试

    Shell函数允许将一组命令组织在一起,方便重复使用。定义函数如下: ```bash my_function() { echo "Hello, World!" } ``` 调用函数: ```bash my_function ``` **Shell调试** 调试Shell脚本通常涉及到使用`set`...

    linux-composure撰写文档版本和组织您的shell函数

    1. `README.md`: 这是项目的说明文件,通常会详细介绍`composure`的安装、配置和使用方法。 2. `composure.sh`或`composure`: 这可能是`composure`的主脚本文件,包含了工具的核心功能。 3. `examples/`: 可能包含...

    shell编程指南,shell脚本,本书共分五部分全。grep家族,sed,AWK,正则表达式,tr用法

    第19章 shell函数 202 第20章 向脚本传递参数 224 第21章 创建屏幕输出 236 第22章 创建屏幕输入 252 第23章 调试脚本 274 第24章 shell嵌入命令 277 第五部分 高级shell编程技巧 第25章 深入讨论 第26章 shell ...

    解决Windows下PHP的exec、shell_exec等函数不能正常运行的方法

    此外,还有其他替代方案来解决这个问题,比如使用`popen`函数,或者在服务器配置中开启FastCGI模式并调整其配置以允许执行命令。不过,这些方法可能需要更深入的服务器配置知识,对初学者来说可能较为复杂。 总之,...

    Shell脚本函数定义和函数参数

    一、Shell函数 本教程目前为止所有脚本都是从头到尾执行。这样做很好,但你也许已经注意到有些脚本段间互相重复。 shell允许将一组命令集或语句形成一个可用块,这些块称为shell函数。 shell中函数的定义格式如下: ...

    VB 中SHELL用法详解

    VB 中,常以Shell指令来执行外部程式,然而它在Create该外部process 後,立刻 就会回到vb 的下一行程式,无法做到等待该Process结束时,才执行下一行指令, 或是说,无法得知该Process是否已结束,甚者,该...

    调用Shell 执行exe 等待返回例子(VB)

    总之,VB通过Shell函数和`WScript.Shell`对象提供了一种灵活的方式来调用外部exe,并能等待其返回,从而实现更复杂的交互操作。掌握这种技术对于任何VB开发者来说都是非常有价值的,无论你是新手还是经验丰富的...

    Lpad()和Rpad()函数的用法

    下面我们将详细解释这两个函数的用法及其示例。 ### Lpad() 函数 `Lpad()` 函数的主要功能是在字符串的左侧添加指定字符,以使最终字符串的总长度达到给定的数值。函数的基本语法如下: ```sql lpad(string, n, ...

    shell编写 shell编写

    而在Shell编写中,我们所说的"shell脚本"(Shell script)是一种使用Shell语言编写的程序,用于自动化一系列的系统任务。在Linux或Unix环境中,Bash Shell是最常用的一种Shell,因此我们通常所说的Shell编写指的是...

    Excel-VBA宏编程实例源代码-以Shell函数启动邮件软件并发送电子邮件.zip

    这个“Excel-VBA宏编程实例源代码-以Shell函数启动邮件软件并发送电子邮件.zip”文件包含了一个实用的VBA宏示例,它利用了Windows操作系统中的Shell函数来启动邮件客户端并自动发送电子邮件。下面我们将详细讨论这个...

Global site tag (gtag.js) - Google Analytics