1. 函数:function,把一段独立功能的代码当作一个整体,并为之一个名字;命名的代码段,此即为函数;
注意:定义函数的代码段不会自动执行,在调用时执行;所谓调用函数,在代码中给定函数名即可;
    函数名出现的任何位置,在代码执行时,都会被自动替换为函数代码;
                 
        语法一:
            function  f_name  {
                ...函数体...
            }
             
        语法二:
            f_name()  {
                ...函数体...
            }
             
2. 函数的生命周期:每次被调用时创建,返回时终止;
  其状态返回结果为函数体中运行的最后一条命令的状态结果;
  自定义状态返回值,需要使用:return
    return [0-255]
      0: 成功
      1-255: 失败
                 
示例:给定一个用户名,取得用户的id号和默认shell;
#!/bin/bash
#userinfo() {if id "$username" &> /dev/null; thengrep "^$username\>" /etc/passwd | cut -d: -f3,7elseecho "No such user."fi
}username=$1
userinfousername=$2
userinfo

  

示例2:服务脚本框架
#!/bin/bash
#
# chkconfig: - 50 50
# description: test service script
#
prog=$(basename $0)
lockfile=/var/lock/subsys/$progstart() {if [ -f $lockfile ]; thenecho "$prog is running yet."elsetouch $lockfile[ $? -eq 0 ] && echo "start $prog finshed."fi
}stop() {if [ -f $lockfile ]; thenrm -f $lockfile[ $? -eq 0 ] && echo "stop $prog finished."elseecho "$prog is not running."fi
}
status() {if [ -f $lockfile ]; thenecho "$prog is running"elseecho "$prog is stopped."fi
}usage() {echo "Usage: $prog {start|stop|restart|status}"
}case $1 in
start)start ;;
stop)stop ;;
restart)stopstart ;;
status)status ;;
*)usageexit 1 ;;
esac

  

3. 函数返回值:
  函数的执行结果返回值:
    (1) 使用echo或printf命令进行输出;
    (2) 函数体中调用的命令的执行结果;
  函数的退出状态码:
    (1) 默认取决于函数体中执行的最后一条命令的退出状态码;
    (2) 自定义:return
                 
  函数可以接受参数:
    传递参数给函数:
      在函数体中当中,可以使用$1,$2, ...引用传递给函数的参数;还可以函数中使用$*或$@引用所有参数,$#引用传递的参数的个数;
      在调用函数时,在函数名后面以空白符分隔给定参数列表即可,例如,testfunc  arg1 arg2 arg3 ...
                 
示例:添加10个用户,添加用户的功能使用函数实现,用户名做为参数传递给函数;
#!/bin/bash
#
# 5: user existsaddusers() {if id $1 &> /dev/null; thenreturn 5elseuseradd $1retval=$?return $retvalfi
}for i in {1..10}; doaddusers ${1}${i}retval=$?if [ $retval -eq 0 ]; thenecho "Add user ${1}${i} finished."elif [ $retval -eq 5 ]; thenecho "user ${1}${i} exists."elseecho "Unkown Error."fi
done

  

练习:写一个脚本;

  使用函数实现ping一个主机来测试主机的在线状态;主机地址通过参数传递给函数;
  主程序:测试172.16.1.1-172.16.67.1范围内各主机的在线状态;
             
练习:写一个脚本;
  打印NN乘法表;
             
         
4. 函数递归:函数直接或间接调用自身;
                 
示例:10!=10*9!=10*9*8!=10*9*8*7!=...
  n
  n*(n-1)!=n*(n-1)*(n-2)!=
#!/bin/bash
#
fact() {if [ $1 -eq 0 -o $1 -eq 1 ]; thenecho 1elseecho $[$1*$(fact $[$1-1])]fi
}fact $1

  

示例:1,1,2,3,5,8,13,21,...

 
#!/bin/bash
#
fab() {if [ $1 -eq 1 ]; thenecho -n "1 "elif [ $1 -eq 2 ]; thenecho -n "1 "elseecho -n "$[$(fab $[$1-1])+$(fab $[$1-2])] "fi
}for i in $(seq 1 $1); dofab $i
done
echo

  

转载于:https://www.cnblogs.com/demonzk/p/6297317.html

【Linux】【Shell】【Basic】函数相关推荐

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

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...

  2. linux文件的定义变量的值,linux shell 自定义函数方法(定义、返回值、变量作用域)...

    一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带functi ...

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

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...

  4. linux无filelength函数,Linux Shell 自定义函数(定义、返回值、变量作用域)介绍

    定义Shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 可以带function f ...

  5. linux 信号传递函数,Linux Shell之七 函数应用

    函数是什么? 函数是一些命令的集合,使用一个名称做代表,称为函数名称.函数名称的命名规则和变量相同. 一旦函数定义好了,执行这个名称,就好象执行Bash的命令一样,称为调用函数.实际上,Bash调用函 ...

  6. linux shell 中函数的返回值问题

    直接看问题:要求用shell实现一个函数,求两天的天数差. 代码一: #!/bin/bash function diffDay() {local stampDiff=`expr $1 - $2`loc ...

  7. linux shell常用函数,ps

    1.说明 report a snapshot of the current processes. ps [options] 2.常用option ① l  长格式输出: ② u  按用户名和启动时间的 ...

  8. 38、linux shell常用函数,nice

    1.优先级从-20到19.越大,优先级越低. 2.nice 可以在创建进程时,为进程指定谦让度(优先级)的增量值,进程的优先级的值是父进程SHELL的优先级的值与我们所指定谦让度的相加和. 3.示例 ...

  9. linux shell 日志函数

    各位运维的兄弟们,你们输出的日志有没有标识呢,标识有没有颜色变化呢???打开日志文件,大片大片的文字,头晕脑胀,很难一眼发现哪些是报错信息,哪些是正常输出的信息,怎么办?这便是大家今天看到这篇文章的原 ...

  10. Linux Shell中的延时函数

    Linux Shell中的延时函数 在 linux shell 脚本中经常需要做一些延时处理. 所以经常要用到 sleep 或 usleep 函数. 下面来说一下  sleep 和 usleep 的区 ...

最新文章

  1. java 文件下载 【学习记录】
  2. 数十名工程师作战5天,阿里达摩院连夜研发智能疫情机器人
  3. c3p0数据库连接池的使用详解
  4. jq判断滚动条向上还是向下
  5. [公告]博客园新服务器照片
  6. Win10系统如何查看声卡ID
  7. django 1.8 官方文档翻译: 1-2-2 编写你的第一个Django应用,第2部分
  8. 32G内存服务器如何设置虚拟内存,大内存服务器设置虚拟内存
  9. 草图大师SketchUp2016下载和安装教程
  10. 双引号后面要加句号吗_省略号后面可以加句号吗
  11. html背景色坐标,【已解决】Html的Canvas设置全局背景色
  12. wox无法启动解决办法:
  13. 法线贴图的实现【OpenGL】
  14. TopoJSON格式规范说明
  15. 声音内容识别 linux,语音支付,银行的声纹识别与声纹鉴定
  16. Python之拉盖尔多项式
  17. 新必应 new bing【NB】这不比知云翻译香
  18. [FPGA] 1、Artix-7 35T Arty FPGA 评估套件学习
  19. labview视觉检测源码
  20. 是时候,给你们自由了

热门文章

  1. flink EventTime与Window
  2. clickhouse创建数据库以及表
  3. spark reduceByKey源码解析
  4. 【火炉炼AI】机器学习042-NLP文本的主题建模
  5. .Net Webapi SignalR与微信小程序的交互
  6. poj3557 Map Generator
  7. Web Uploader文件上传插件
  8. 【FLUENT案例】04:利用DDPM+DEM模拟鼓泡流化床
  9. nginx中配置pathinfo模式示例
  10. python异步回调函数的实现