zoukankan      html  css  js  c++  java
  • shell编程(五)之函数

    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 $0)
    file=/var/lock/subsys/$proc
    
    function start {
      if [ -e $file ]; then
        echo "$proc服务已启动。。。"
      else
        touch $file
        if [ $? -eq 0 ]; then
          echo "$proc服务启动成功"
        else
          echo "$proc服务启动失败"
        fi
      fi
    
    }
    function stop {
      if [ -e $file ]; then
        rm -rf $file
        if [ $? -eq 0 ]; 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 2345 testsrv on

    练习: 添加10个用户

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

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

    1.阶乘:

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

    2.斐波那契

    #!/bin/bash
    fab (){
      if [ $1 -eq 1 -o $1 -eq 2 ]; then
        echo 1
      else
        echo $[$(fab $[$1-1])+$(fab $[$1-2])]
      fi
    }
    fab 10
  • 相关阅读:
    OpenCV/python读取,显示,保存图像
    机器学习的基本分类
    Qt Designer常用部件介绍
    C#数据类型列表
    SQL-Base 函数
    SQl 基本函数
    SQL 插入数据
    SQL-Base 用表组织数据
    SQLserver的基本用法
    C#MyBank(自己的看法,转账有点小问题)
  • 原文地址:https://www.cnblogs.com/ckh2014/p/10765191.html
Copyright © 2011-2022 走看看