`
m635674608
  • 浏览: 5051946 次
  • 性别: 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 ...

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

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

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

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

    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