`
m635674608
  • 浏览: 4929839 次
  • 性别: 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
分享到:
评论

相关推荐

    VBShell函数用法参照.pdf

    VBShell函数用法参照.pdf

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

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

    VB 中SHELL用法详解

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

    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中函数的定义格式如下: ...

    linux 中shell函数

    本资源讲解shell的使用和用法,对于入门的朋友好

    shell 编程指南pdf

    11.1.12 使用k的其他sort方法 108 11.1.13 使用k做分类键排序 108 11.1.14 指定sort序列 108 11.1.15 pos用法 108 11.1.16 使用head和tail将输出分类 109 11.1.17 awk使用sort输出结果 109 11.1.18 将两个分类文件...

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

    下面小编就为大家带来一篇shell 使用数组作为函数参数的方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    shell自定义函数及参数调用解析

    只需要使用函数名,即可调用某个函数:$ fname ; #执行函数 可以传递参数给函数,并由脚本进行访问:fname arg1 arg2; # 传递参数 以下是函数fname的定义。在函数fname中,包含了各种访问函数参数的方法。 代码如下:...

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

    关于Lpad()和Rpad()两个函数的用法,在这里举例教大家使用。

    Shell脚本中让进程休眠的方法(sleep用法)

    有时候写Shell的脚本,用于顺序执行一系列的程序。 有些程序在停止之后并没能立即退出,就例如有一个 tomcat 挂了,就算是用 kill -9 命令也还没瞬间就结束掉。 这么如果 shell 还没等其退出就接着执行下一行,这么...

    UNIX命令及SHELL编程

    02_Shell-使用find和xargs.PDF 03_Shell-后台执行命令.PDF 04_Shell-文件名置换.PDF 05_Shell-shell输入与输出.PDF 06_Shell-命令执行顺序.PDF 07_文本过滤-正则表达式介绍.PDF 08_文本过滤-grep 家族.PDF 09...

    Linux在shell中自动生成1到100的数组方法(两种方法)

    在shell脚本中创建1-100的方法很多,那我在这里主要就说两种容易理解且方便的方法:  第一种方法:  for i in {1..100}  do  echo $i  done  使用{1..100}这种方式简单明了,大家也可以在linux命令模式下直接...

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

    在Windows平台下安装PHP后,在使用PHP的exec、shell_exec等函数时,经常会遇到报错:unable to fork...,这实际上是因为PHP对cmd.exe没有足够的权限引起的。

    shell:Bash Shell脚本和函数库

    大多数脚本使用库中的函数,因此它们需要在脚本内部获取源才能使用。 为此,有sourcer 。 它所做的只是包括lib目录中的每个库文件。 因此,如果您需要这些库,那么您所要做的就是包括(来源) sourcer脚本,然后它就...

    Shell自学pdf.zip

    第19 章shell 函数.PDF 第20 章向脚本传递参数.PDF 第21 章创建屏幕输出.PDF 第22 章创建屏幕输入.PDF 第23 章调试脚本.PDF 第24 章shell 嵌入命令.PDF 第25 章深入讨论重定向.PDF 第26 章shell 工具.PDF 第27 章几...

    shell编程 linux

    019shell 函数.pdf 020向脚本传递参数.pdf 021创建屏幕输出.pdf 022创建屏幕输入.pdf 023调试脚本.pdf 024shell嵌入命令.pdf 025深入讨论.pdf 026shell 工具.pdf 027几个脚本例子.pdf 028运行级别脚本.pdf...

    绝版经典 LINUX与UNIX SHELL编程指南 PDF 高清版 [16.3M]

    第十九章 SHELL函数 第二十章 向脚本传递参数 第二一章 创建屏幕输出 第二二章 创建屏幕输入 第二三章 调试脚本 第二四章 SHELL嵌入命令 第五部分 高级SHELL编程技巧 第二五章 深入讨论 第二六章 SHELL工具 ...

Global site tag (gtag.js) - Google Analytics