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. PowerDesigner软件建立新模型。

      打开PowerDesigner软件,选择菜单文件->建立新模型,或者敲击键盘ctrl+N   弹出建立新模型窗口,模型类型选择Object-Oriented Model,图选择Class D ...

  2. 解决python3 pip安装、更新及yaml安装

    问题:python3.6版本使用pip安装第三方库时总是报错 电脑中存在多个python版本写成对应pip版本 解决:pip3 install pyOpenSSL -i http://pypi.dou ...

  3. linux上磁盘的操作相关命令

    1.查看磁盘IO负载 - 看哪些进程在读写磁盘 lsof /dev/sda2 |head

  4. pandas(一)

    import numpy as py import pandas as pd Series对象 data= pd.Series([0.25,0.5,0.75,1.0])   默认索引是数字 data= ...

  5. 搭建docker私有仓库(https)

    1.修改openssl.cnf,支持IP地址方式,HTTPS访问在Redhat7或者Centos系统中,文件所在位置是/etc/pki/tls/openssl.cnf.在其中的[ v3_ca]部分,添 ...

  6. MySQL中实现连续日期内数据统计,缺省天数0补全

    某一日,需要查询订单表中一个月每天的金额数 查询出数据如下: array(14) { [0] => array(2) { ["money"] => string(7) ...

  7. Oracle删库跑路

    --10g R2 startup mount exclusive restrict; alter system enable restricted session; drop database; -- ...

  8. python 计算器

    import redef main(): #""代表的是空,split()方法已空格或者\t,\n进行切割,join方法是列表,元组,字典变为字符串 a = "" ...

  9. DDD关键知识点整理汇总

    创建领域对象采用构造函数或者工厂,如果用工厂时需要依赖于领域服务或仓储,则通过构造函数注入到工厂: 一个聚合是由一些列相联的Entity和Value Object组成,一个聚合有一个聚合根,聚合根是E ...

  10. (.NET高级课程笔记)反射总结

    反射总结 1.dll-IL-matadata-反射 2.反射加载dll,获取module.类.方法.特性 3.反射创建对象:反射+简单工厂+配置文件 4.反射调用实例方法.静态方法.重载方法.私有方法 ...