函数:
1、函数介绍function
 为了避免代码重复使用,我们一般通过函数编写代码块,而这一个代码块用来实现某种功能。
 且,这个功能在后面的代码中,会重复调用;
 
 def
2、函数的语法格式
 函数的写法格式:
 function check_cpu {
  cat /proc/cpuinfo
 }
 ls /etc/
 check_cpu 【不调用函数,则函数体中的命令是不会执行的;在哪里调用,函数体中的命令就在那里执行】
 *fun_name() {
  函数体
  $1 $2 ... $10
 }
 fun_name 1 2 3
 :wq
 function.sh 4 5 6 7 8 9 10 11 12 13 14
3、函数的调用  -- return
 函数返回值
 1、当函数中指定了判断语句的时候,我们默认要返回一个错误的结果,但是最近一条命令确实正确的,这时候,我们需要通过return返回一个我们需要的错误状态码;
 2、函数结束的时候,我们需要指定一个return的正确返回码;
 如果使用在循环语句中,return会跳出循环;
4、函数接受参数
 函数 变量
 和普通的命令一样
 只需要注意,在函数接受参数的时候,不会使用外部的传参,而是以脚本内部的参数为准,
 
5、函数中的变量
 本地变量
  local 变量名=xxx
  本地变量只在本函数内部生效
 局部变量
  脚本内部的变量
 环境变量
  在整个Linux系统的bash中生效
 
  TEST() {
   local i=9
   let i++
   echo i
   exit 0
  }
  i=1
  TEST
  echo i
 扩展: 关于脚本执行的问题:
 bash 的方式来执行 -- #!/bin/bash
  bash所执行的脚本中定义的变量,在当前shell的子shell中;
 全路径或者相对路径的方式来执行; -- 须有授权执行权限;
 source 脚本文件 或者 . 脚本文件
  source这种方式来执行脚本的时候,内部变量所定义的值是在当前shell中的;
6、函数递归
 你 站在镜子前,后面又有一面镜子
 n的阶乘

n! = n(n-)!
$[$* $[ fac -]] fact(){
if [ $ -lt ];then
echo //一定要写成1
else
i=$[$*$(fact $[$-])] // n(n-1)
echo $i
fi
} (n-) = (n-)(n-)!
。。。
!=*! fac(){
$[fac - ]
}
fac
 兔子数列,斐波那契数列
  1 + 1 = 2
  1+ 1 + 1 = 3
  2 + 1 + 2  = 5
  3 +  5 = 8
            =   n
  1 1 2 3 5 8 13 21 34 ... n
  $[$(fab $[$1-1])+$(fab $[$1-2])]
  
  Fn = F(n-1) + F(n-2)

#!/bin/bash
#
fab(){
if [ $ -eq ];then
echo
elif [ $ -eq ];then
echo
else
echo $[$(fab $[$-])+$(fab $[$-])]
fi
}
fab
练习
1、脚本可以接受参数:start stop restart status
 case 参数 in
 start)
 stop)
 restart)
 status)
 *)
 【case PAT支持的格式:* 任意内容 start|stop)  a*) (case语句中的PAT是支持文件通配的) 】
2、如果参数非此四者之一,提示使用个时候报错退出;
 *)
  echo "Usage:please input {start|stop|restart|status}"
3、如果是start:则创建 /var/lock/subsys/SCRIPT_NAME,并显示“启动成功”【考虑:如果事先已经启动过一次,该如何处理?】
 start)
  if [ -e /var/lock/subsys/testd_name ];then
   echo "服务已启动" 
  else
   touch /var/lock/subsys/testd_name
   echo "服务启动成功"
  fi
4、如果是stop:则删除/var/lock/subsys/SCRIPT_NAME,并显示“停止完成”;【考虑:如果事先已经停止过了,该如何处理?】
 stop)
  if [ -e /var/lock/subsys/testd_name ];then
   rm -f /var/lock/subsys/testd_name
   echo "服务关闭成功"
  else
   echo "服务已经关闭"
  fi
5、如果restart,则先stop,再start;【考虑:如果本来没有start,如何出列?】
 restart)
  【将前面的代码写成函数】
  start
  stop
6、如果是status,则
如果/var/lock/subsys/SCRIPT_NAME文件存在,则显示“SCRIPT_NAME is running…”
如果/var/lock/subsys/SCRIPT_NAME文件不存在,则显示“SCRIPT_NAME is stopped …”
i=file.txt

Start() {
if [ -e /root/$i ];then
echo "服务已经启动"
else
touch /root/$i
echo "服务已启动"
fi
} Stop() {
if [ -e /root/$i ];then
rm -f /root/$i
echo "服务已关闭"
fi
} Status() {
if [ -e /root/$i ];then
echo "服务已开启"
else
echo "服务已关闭"
fi
} Usage() {
echo "Usage:{/root/testd.sh start|stop|status|restart}"
} if [ $# -lt ];then
Usage
exit
fi case $ in
start)
Start
;;
stop)
Stop
;;
restart)
Stop
Start
;;
status)
Status
;;
*)
Usage
;;
esac

Shell:Day07.笔记的更多相关文章

  1. Learning The Bash Shell读书笔记(整理)

    最近搞了一本书 Learning Bash Shell,发现有人已经写了阅读笔记,我就在这边整理一下 来自blog:http://blog.sina.com.cn/n4mine Learning Th ...

  2. SHELL学习笔记----IF条件判断,判断条件

    SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外.  if list then           do something here   ...

  3. Shell编程笔记

    Shell编程笔记与Windows下熟悉的批处理类似,也可以将一些重复性的命令操作写成一个脚本方便处理.   修改别人的脚本,运行后遇到个问题 setenv: command not found 查证 ...

  4. shell学习笔记

    shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...

  5. 菜鸟教程之学习Shell script笔记(上)

    菜鸟教程之学习Shell script笔记 以下内容是,学习菜鸟shell教程整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-shell.ht ...

  6. python day07笔记总结

    2019.4.4 S21  day07笔记总结 一.深浅拷贝 1.copy.copy()     浅拷贝 deep.copy()    深拷贝 2.一般情况 1.str/int/bool 是不可变类型 ...

  7. [转帖][Bash Shell] Shell学习笔记

    [Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html  阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...

  8. shell学习笔记汇总

    1.shell脚本中函数使用 函数定义在前,调用在后,顺序反了就没有效果了.函数调用为:函数名 参数列表 函数内部通过以下变量访问函数的参数:shell脚本函数中: $0: 这个脚本的名字 $n: 这 ...

  9. shell 学习笔记2-shell-test

    一.字符串测试表达式 前面一篇介绍:什么是shell,shell变量请参考: shell 学习笔记1-什么是shell,shell变量 1.字符串测试表达式参数 字符串需要用""引 ...

随机推荐

  1. Simulink仿真入门到精通(十七) Simulink代码生成技术详解

    17.1 基于模型的设计 基于模型设计是一种流程,较之传统软件开发流程而言,使开发者能够更快捷.更高效地进行开发.适用范围包括汽车电子信号处理.控制系统.通信行业和半导体行业. V字模型开发流程整体描 ...

  2. 如何在国内离线安装Chrome扩展并科学查资料

    国内离线安装Chrome扩展 这些链接是从知乎国内离线安装 Chrome 扩展程序的方法总结 - 知乎看到的, 怕这个链接失效, 在这里自己备一份: Crx4Chrome - Download CRX ...

  3. html5特性简要概括

    1.html5主要的设计目的: 互联网语义化,以便更好地被人类和机器阅读 更好的在移动设备上支持web应用 https://www.w3.org/TR/html5 新增内容: 新的语义标签 <h ...

  4. 如何使用Logstash

    目录 一.什么是Logstash 二.如何安装 三.快速使用 四.Input输入插件 五.codec编码插件 六.filter过滤器插件 七.output输出插件 八.总结 一.什么是Logstash ...

  5. 微服务系列之 Consul 注册中心

    原文链接:https://mrhelloworld.com/posts/spring/spring-cloud/consul-service-registry/ Netflix Eureka 2.X ...

  6. 异步编程RxJava-介绍

    前言前段时间写了一篇对协程的一些理解,里面提到了不管是协程还是callback,本质上其实提供的是一种异步无阻塞的编程模式:并且介绍了java中对异步无阻赛这种编程模式的支持,主要提到了Future和 ...

  7. 使用EPX Studio 7.0 下载网站验证码

    implementation var Document_: DispHTMLDocument; //用于处理网页文档对象 EPX: IExcelPanelXDisp; procedure TForm1 ...

  8. Natas27 Writeup(mysql溢出截断漏洞)

    Natas27: 一个登录节界面,查看源码. <html> <head> <!-- This stuff in the header has nothing to do ...

  9. Vue + element从零打造一个H5页面可视化编辑器——pl-drag-template

    pl-drag-template Github地址:https://github.com/livelyPeng/pl-drag-template 前言 想必你一定使用过易企秀或百度H5等微场景生成工具 ...

  10. [AI开发]零代码公式让你明白神经网络的输入输出

    这篇文章的标题比较奇怪,网上可能很少类似专门介绍神经网络的输入输出相关文章.在我实际工作和学习过程中,发现很有必要对神经网络的输入和输出做一个比较全面地介绍.跟之前博客一样,本篇文章不会出现相关代码或 ...