function:函数

函数只有被调用才会执行
如何调用:给定函数名
  函数名出现的地方,会被自动替换为函数代码

函数的生命周期:被调用时创建,返回时终止
return命令返回自定义状态结果
  0:成功
  1-255:失败

语法一:  

function f_name {
  ...函数体...
}

语法二:

f_name(){
  ...函数体...
}

练习: 写一个脚本,完成如下要求
1.脚本可接受参数:start,stop,restart,status
2.如果参数非此四者之一,提示使用格式后报错退出
3.如果是start,则创建/var/lock/subsys/SCRIPT_NAME,并显示启动成功
考虑: 如果事先已经启动过一次,该如何处理
4.如果是stop,则删除/var/lock/subsys/SCRIPT_NAME,并显示停止完成
考虑: 如果事先已然停止过了,该如何处理
5 如果是restart,则先stop,在start
考虑:如果本来没有start,如何处理
6.如果是status,则:
如果/var/lock/subsys/SCRIPT_NAME文件存在,则显示”SCRIPT_NAME is running“
如果/var/lock/subsys/SCRIPT_NAME文件不存在,则显示”SCRIPT_NAME is stopped“

#!/bin/bash
proc=$(basename $)
file=/var/lock/subsys/$proc function start {
  if [ -e $file ]; then
    echo "$proc服务已启动。。。"
  else
    touch $file
    if [ $? -eq ]; then
      echo "$proc服务启动成功"
    else
      echo "$proc服务启动失败"
    fi
  fi }
function stop {
  if [ -e $file ]; then
    rm -rf $file
    if [ $? -eq ]; then
      echo "$proc服务停止成功"
    else
      echo "$proc服务停止失败"
    fi
  else
    echo "$proc服务已停止"
  fi
}
function restart {
  if [ -e $file ]; then
    stop
    start
  else
    start
  fi
}
function status {
  if [ -e $file ]; then
    echo "$proc is running"
  else
    echo "$proc is stopped"
  fi
}
while true; do
  case $option in
    start)
      start
      ;;
    stop)
      stop
      ;;
    restart)
      restart
      ;;
    status)
      status
      ;;
  esac
read -p "Enter an option(start or stop or restart or status):" option
if [[ $option != "start" && $option != "stop" && $option != "status" && $option != "restart" ]]; then
  read -p "wrong option,Enter an option again:" option
fi
done

test18.sh 脚本加入服务:

cp test18.sh /etc/rc.d/init.d
chkconfig --add test18.sh
chkconfig --list test18.sh
chkconfig --level testsrv on

练习: 添加10个用户

#!/bin/bash
# 添加是个用户,函数实现
function adduser {
  if [ $# -lt ]; then
    return # : no arguments
  fi   if id $ &> /dev/null; then
    echo "$1 exists."
    return
  else
    useradd $
    [ $? -eq ] && echo "add $1 success" && return
  fi
} for i in $(seq );do
  adduser myuser$i
done

函数递归:函数直接或间接调用自身

1.阶乘:

#!/bin/bash
fact() {
  if [ $ -eq -o $ -eq ]; then
    echo
  else
    echo $[$*$(fact $[$-])]
  fi
}
fact

2.斐波那契

#!/bin/bash
fab (){
  if [ $ -eq -o $ -eq ]; then
    echo
  else
    echo $[$(fab $[$-])+$(fab $[$-])]
  fi
}
fab

shell编程(五)之函数的更多相关文章

  1. shell编程:向函数中传递参数

    cal.sh sh cal.sh 20 + 10 实现这样传参的函数(shell不是一个严谨的编程语言,参数这种是不用定义的,函数中直接引用,shell执行中直接写) #!/bin/bash # ca ...

  2. shell编程:定义函数

    第一种方式 function hello { echo "hello" } 第二种方式 hello() { echo "hello" } 调用函数 命令行:he ...

  3. shell编程之服务脚本编写,文件锁以及信号捕获

    shell脚本编程是linux运维工程师必备的技能,也是非常重要的一个技能,所以把shell编程学好,只有好处.基础语法我也就不讲了,学过C语言这些语言的,稍微看一下就能明白shell编程的基础,所以 ...

  4. centos shell编程5 LANMP一键安装脚本 lamp sed lnmp 变量和字符串比较不能用-eq cat > /usr/local/apache2/htdocs/index.php <<EOF重定向 shell的变量和函数命名不能有横杠 平台可以用arch命令,获取是i686还是x86_64 curl 下载 第三十九节课

    centos shell编程5  LANMP一键安装脚本 lamp  sed  lnmp  变量和字符串比较不能用-eq  cat > /usr/local/apache2/htdocs/ind ...

  5. shell编程 之 函数

    1 函数基本格式 个人认为,编程中的函数基本上有3种,第一种是糖葫芦函数,一根棒棒串起来,执行一次就是走个过场,吃完了糖葫芦就没别的事了,第一种基本就是这样的: 它没有参数,没有返回值. demoFu ...

  6. shell的编程结构体(函数、条件结构、循环结构)

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 1.1 shell函数 在shell中,函数可以被当作命令一样 ...

  7. shell编程中的 三种结构: 条件if/选择结构case/循环for/while/until等结构 和 函数的用法

    shell 函数的使用 (md中, 列表本身是有格式的, 他要产生缩进, 其次,列表项和列表项之间, 可以留有一个空行, 是合法的, 允许的) shell函数,就是 就相当于一个命令来看待和处理的, ...

  8. Linux(五)shell编程基础

    一.Linux shell简介 1.shell概述 Shell 是用户与内核进行交互操作的一种接口,目前最流行的 Shell 称为 bash Shell          Shell 是一门编程语言& ...

  9. 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!

    http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...

随机推荐

  1. jqgrid 插件的使用

    首先设定table的id和分页 <div id=”gridList”></div>   //table名称 <div id=”page”></div>  ...

  2. VUE-002-前端分页(el-pagination)展示数据

    在web开发过程中,通常使用表格展示数据,在数据较多时采用分页的方式展示给用户. 分页方式有前端假分页和后端分页两种实现方式,此文仅记录前端假分页实现方式. 第一步:添加分页组件(el-paginat ...

  3. ELK日志系统介绍

    ELK介绍 需求背景: 业务发展越来越庞大,服务器越来越多 各种访问日志.应用日志.错误日志量越来越多,导致运维人员无法很好的去管理日志 开发人员排查问题,需要到服务器上查日志,不方便 运营人员需要一 ...

  4. python smtp 发邮件 添加附件

    # -*- coding:utf-8 -*- # __author__ = 'justing' import os import smtplib from email.mime.multipart i ...

  5. mysql 处理utf8mb4的问题

    jdbc端的characterEncoding=utf8 无法改为utf8mb4 测试: create table utf8mb4_test (name1 varCHAR(20) CHARACTER ...

  6. Visual Studio 独立 Shell 下载

    https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/isolated-shell/ SSMS 2017 安装问题 https:/ ...

  7. net Core TOptions和热更新

    TOptions接口 net Core 项目有个appsettings.json文件,程序默认也是读取的这个文件,appsettings.json是一个配置文件 我们可以把appsettings.js ...

  8. 关于asp.net中链接数据库的问题

    学习了asp.net 有web服务器控件和C#代码两部分 那么在做页面时候,需要用到数据库和asp.net的链接 课本上只是说明了和SQL server的链接,本文介绍如何在.net中链接 Acces ...

  9. zabbix监控实战<3> 之自定义监控实例

    第一章    自定义监控tcp状态 命令可以选择ss 或者 netstat    ss打印基于socket的统计信息,实际运行下来,ss的速度要比netstat要快得多 1.1  tcp的十一种状态 ...

  10. UEP-添加

    添加数据时候自动更新时间,注意添加数据时,要设置最大主键 时间的工具类:CommonUtil 人的工具类: ContextUtil ScmCompanyAccount scmCompanyAccoun ...