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. sleep wait yield

    sleep 暂停当前线程,允许低优先级线程获得执行机会,但并不释放对象的锁,进入不可运行状态 yield 类似sleep,但只允许同优先级有获得执行机会,同样也不会释放锁,当前线程仍是可运行状态,因此 ...

  2. 多线程之Lock的基本介绍

    基本介绍 java.util.concurrent.locks是java1.5之后出现的一种锁实现方式,是一个接口.但是在这之前已经有一个同步机制的实现就是synchronized关键字,那为什么还要 ...

  3. app启动过程

    调用main函数之前: App开始启动后,系统首先加载可执行文件(自身App的所有.o文件的集合),然后加载动态链接库dyld.交由 ImageLoader 读取 image,其中包含了我们的类.方法 ...

  4. YII - 打印 SQL

    $query = Order::find()->select(['order_sys_id'])->where(['order_car_id'=>'AA','order_status ...

  5. C# 多线程之Task(任务

      1.简介 为什么MS要推出Task,而不推Thread和ThreadPool,以下是我的见解: (1).Thread的Api并不靠谱,甚至MS自己都不推荐,原因,它将整个Thread类都不开放给W ...

  6. 2019春第十周作业Compile Summarize

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 在这里 我在这个课程的目标是 能够对C语言的编写更加得心应手 这个作业在那个具体方面帮助我实现目标 结构体更进一步 参考文献与网址 C语言 ...

  7. 一文讲透静电放电(ESD)保护(转发)

    一直想给大家讲讲ESD的理论,很经典.但是由于理论性太强,任何理论都是一环套一环的,如果你不会画鸡蛋,注定了你就不会画大卫. 先来谈静电放电(ESD: Electrostatic Discharge) ...

  8. Ch07 包和引入 - 练习

    1. 编写示例程序,展示为什么  package com.horstmann.impatient  不同于 package com package horstmann package impatien ...

  9. JavaScript 的if语句和==的判断

    一. if(xx)的判断 JavaScript 遇到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值.系统内部会自动调用Boolean函数. 1.当if括号里面的表达 ...

  10. hightopo学习之旅一 -- 节点动画

    参照官网 动画手册 1.引入所需HT文件 <script src="plugins/ht/core/ht.js"></script> <script ...