一、 什么是Shell脚本

  shell脚本并不能作为正式的编程语言,因为它是在linux的shell中运行的,所以称为shell脚本。事实上,shell脚本就是一些命令的集合。

  假如完成某个需求需要一口气输入10条命令,对于简单的命令,我们可以直接在shell窗口中输入,但如果是比较长且复杂的命令,一次一次敲就会显得很麻烦。我们可以把这10条命令都记录到一个文档中,然后去调用文档中的命令,这样就能一步操作完成,以后再遇到这个需求的时候也只需要调用这个文档就行了,这个文档就是shell脚本,只是这个文档有它特殊的格式。

  shell脚本能帮我们很方便地管理服务器,我们可以指定一个任务计划,定时去执行某个shell脚本以满足需求。

  二、shell脚本的创建和执行

  下面来编写第一个脚本:

  vim first.sh #写入下面内容

  #!/bin/bash

  ## This is my first shell script.

  ## Writen by lzx 2018-7-27

  date

  echo "Hello World!"

  shell脚本通常都以.sh作为后缀名,不是说不加.sh的脚本不能运行,只是大家的习惯,这样也方便辨识。

  上面,第一行要以#!/bin/bash开头,表示该文件使用的是bash语法,不设置该行也可以执行,但不符合规范。

  #表示注释,后面跟一些该脚本的相关注释内容,以及作者、创建日期或版本等。注释可以省略,但不建议省略,因为我们的记忆力有限,没有注释我们自己都不知道自己写的脚本是用来干什么的、是什么时候写的。建议从一开始就要养成写脚本的良好习惯,方便自己也方便他人。

  下面来执行上面的脚本:

  # sh first.sh #用sh命令来执行

  2018年 07月 27日 星期五 09:42:54 CST

  Hello World!

  还有一种执行方式:

  # ./first.sh #./表示当前目录

  -bash: ./first.sh: 权限不够

  # chmod +x first.sh #给执行权限

  # ./first.sh

  2018年 07月 27日 星期五 09:44:09 CST

  Hello World!

  使用上面方法来执行shell脚本的前提是脚本本身有执行权限,所以需要给脚本加一个x权限。

  另外,使用sh命令来执行脚本时,可以加-x选项来查看脚本的执行过程:

  # sh -x first.sh

  + date

  2018年 07月 27日 星期五 09:49:22 CST

  + echo 'Hello World!'

  Hello World!

  三、命令date

  # date #显示当前时间

  四、Shell脚本中的变量

  shell脚本中的变量可以是一个数值、一个命令或者一个路径。定义变量的格式为:变量名=变量的值,在脚本中引用变量的值时需要加上符号$。

  五、数字运算

  在脚本中进行数字运算,也会用到变量。

  下面再自定义一个脚本:

  #! /bin/bash

  ## For get the sum of two numbers.

  ## Writen by lzx 2018-7-27

  a=1

  b=2

  sum=$(($a+$b))

  echo "$a+$b=$sum"

  1+2=3

  数学计算要用((…))括起来,并且前面要加上符号$。

  六、获取用户输入

  read命令用于和用户交互,它把用户输入的字符串作为变量值,用法如下:

  #!/bin/bash

  ## Using 'read' in shell script.

  ## Writen by lzx 2018-7-27

  read -p "Please input a number:" x

  read -p "Please input another number:" y

  sum=$[$x+$y]

  echo "The sum of two numbers is:$sum"

  Please input a number:5

  Please input another number:11

  The sum of two numbers is:16

  七、if语句

  不带else

  具体格式如下:

  if 判断语句;then

  command

  fi

  下面自定义一个脚本:

  #!/bin/bash

  read -p "Please input your score: " a

  if ((a<60));then

  echo "You didn't pass the exam."

  fi

  上面出现了((a<60))这样的形式,表示里面的是一个数学运算,(( ))这是shell脚本特有的格式,只用一个小括号或不用括号都会报错,要记住这个格式。

  带有else

  具体格式如下:

  if 判断语句

  then

  command

  else

  command

  fi

  带有elif

  具体格式如下:

  if 判断语句1;then

  command

  elif 判断语句2;then

  command

  else

  command

  fi

  判断数值大小除了可以使用((

  ))的形式外,还可以使用[],但不能使用>、<、=这样的符号了,要使用-lt(小于)、-gt(大于)、-le(小于或等于)、-ge(大于或等于)、-eq(等于)、-ne(不等于)。

  八、和文档相关的判断

  shell脚本中if还经常用于判断文档的属性,比如判断是普通文件还是目录,判断文件是否可读、写、执行权限等。

  if 常用的选项有以下几个:

  -e :判断文件或目录是否存在

  -d :判断是不是目录以及是否存在

  -f :判断是不是普通文件以及是否存在

  -r :判断是否有读权限

  -w :判断是否有写权限

  -x :判断是否有执行权限

  具体格式如下:

  if [ -e filename ]

  then

  command

  fi

  示例如下:

  # if [ -d /home/ ]; then echo ok; fi

  ok

  # if [ -f /home/ ]; then echo ok; fi

  /home/是目录而非文件,所以在判断它是否为文件时并不会显示ok。

  九、case逻辑判断

  在shell脚本中,除了使用if来判断逻辑外,还可以使用case。

  具体格式如下:

  case 变量 in

  value1)

  command

  ;;

  value2)

  command

  ;;

  value3)

  command

  ;;

  *)

  command

  ;;

  esac

  下面自定义一个脚本:

  #!/bin/bash

  read -p "Input a number: " n

  a=$[n%2]

  case $a in

  1)

  echo "The number is odd." # odd:奇数

  ;;

  0)

  echo "The number is even." # even:偶数

  ;;

  *)

  echo "It's not a number!"

  esac

  case脚本常用于编写系统服务的启动脚本。

  十、for循环

  具体格式如下:

  for 变量名 in 循环的条件

  do

  command

  done

  下面自定义一个脚本:

  #!/bin/bash

  for i in `seq 1 5`; do # seq 1 5 表示从1到5的一个序列

  echo $i

  done

  上面,循环的条件是引用系统命令的执行结果seq 1 5,但必须用反引号括起来。

  十一、while

  日常运维工作中,也会经常用while循环来编写死循环的脚本,用于监控某项服务。

  具体格式如下:

  while 条件

  do

  command

  done

  下面自定义一个脚本:

  #!/bin/bash

  a=6

  while [ $a -ge 1]

  do

  echo $a

  a=$[$a-1]

  done

  另外,可以用一个冒号:代替循环条件,这样就可以做到死循环。

  十二、exit

  exit,它作用的范围更大,直接退出整个shell脚本

  目前这些是我们常用的,毕竟咱不是搞运维的,更多的是用它写一写简单的脚本来存储命令。下面我将以px4安装脚本为例说明shell脚本使用:

  ————————————————

相关的视频学习资料

  shell脚本快速入门

  http://www.makeru.com.cn/live/3485_1489.html?s=45051

  linux基础

  http://www.makeru.com.cn/course/details/2058?s=45051

  快速上手linux

  http://www.makeru.com.cn/live/1758_310.html?s=45051

  Linux网络经典案例

  http://www.makeru.com.cn/live/3485_1630.html?s=45051

shell脚本自学笔记的更多相关文章

  1. shell 脚本实战笔记(10)--spark集群脚本片段念念碎

    前言: 通过对spark集群脚本的研读, 对一些重要的shell脚本技巧, 做下笔记. *). 取当前脚本的目录 sbin=`dirname "$0"` sbin=`cd &quo ...

  2. shell脚本编写笔记

    包含转载内容,转载自http://wenku.baidu.com/link?url=jtCHxEYzgGve6P64U3JRQRgU6nhpGvqFLLpWu9I2Htq6hi9TGLudRFkk7r ...

  3. Shell 脚本编程笔记(一) Hello Shell

    最近不断在接触Linux操作系统,对它一个终端走天下的特性感到十分新奇和伟大.同时也被各种命令折磨的死去活来...公司的一个老同事给我讲,在公司的极品geek宅都是只用一个黑黑的框完成一切的.结果我一 ...

  4. shell脚本学习笔记(符号)

    shell脚本的学习: 1.Shell的作用是解释运行用户的命令,用户输入一条命令,Shell就解释运行一条,这样的方式称为交互式(Interactive),Shell还有 一种运行命令的方式称为批处 ...

  5. linux shell脚本编程笔记(二): 分支结构

    1.if if command then commands fi if command then commands else commands fi if command1 then command ...

  6. shell脚本学习笔记 (流编辑器sed)

    sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用很普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出. sed不 ...

  7. shell脚本初学者笔记

    概述 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务. Shell 脚本(shell script),是一种为 shell 编写的脚本程序. Linu ...

  8. shell脚本入门笔记

    转载:http://mp.weixin.qq.com/s?__biz=MzA3MTIxNzkyNg==&mid=204081791&idx=1&sn=27bb1d827e0f8 ...

  9. Shell脚本学习笔记之(自动填充函数模板)

    其实,vii 就是写的一个脚本,跟 vi 没半毛钱关系,只不过借用一下这个名字而已.那这个脚本长什么样呢?look: 下面来详细的解析上面的代码,来看第1行: #!/bin/bash 这是Shell脚 ...

随机推荐

  1. 硕盟SM-T54|type-c转接头HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞接口功能说明

    硕盟SM-T54是一款 TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞,支持四口同时使用,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显 ...

  2. 使用AOP+自定义注解完成spring boot的接口权限校验

    记使用AOP+自定义注解完成接口的权限校验,代码如下: pom文件添加所需依赖: 1 <dependency> 2 <groupId>org.aspectj</group ...

  3. 海量列式非关系数据库HBase 架构,shell与API

    HBase的特点: 海量存储: 底层基于HDFS存储海量数据 列式存储:HBase表的数据是基于列族进行存储的,一个列族包含若干列 极易扩展:底层依赖HDFS,当磁盘空间不足的时候,只需要动态增加Da ...

  4. io流-文件流\节点流

    FileOutputStream类(jdk1.0) 描述 java.io.FileOutputStream 类是文件字节输出流,用于将数据写入到文件中. 构造方法 //构造方法 FileOutputS ...

  5. 浅谈VMware的NAT模式

    什么是NAT模式?理论化的措辞我就不说了,我将结合本人平时的经验来简单的说明一下NAT模式,以及配置NAT模式时遇到的问题. 大家都知道,我们的电脑要想联网,需要与交换机连接,假设交换机的网关为192 ...

  6. ❤️❤️用最简单的方法在Webstorm中打开已存在项目 和 新建Vue项目 (亲测实用)❤️❤️

    ​ 目录 一:打开已存在项目时 二:新建一个vue项目 使用webstorm创建vue项目创建vue项目各个公司用的工具都不一样 最常见的有HBuilder X,WebStorm,Visual Stu ...

  7. [Apache Atlas] Atlas 架构设计及源代码简单分析

    Apache Atlas 架构图 Atlas 支持多数据源接入:Hive.HBase.Storm等 Type System Type Atlas 中定义了一些元数据类型 ── AtlasBaseTyp ...

  8. 可选链运算符、空值合并运算符 --应用到vue项目

    1.npm安装 npm install @babel/plugin-proposal-optional-chaining // 可选链运算符 ?. npm install @babel/plugin- ...

  9. video.js视频播放插件

    1 初始化 Video.js初始化有两种方式. 1.1 标签方式 一种是在<video>标签里面加上class="video-js"和data-setup='{}'属性 ...

  10. 【tp3.2】根据不同域名来加载不同的配置文件

    遇到问题: 最近遇到一个需求,需要多个公众号使用同一个项目,这就导致了不同公众号访问的数据库和公众号配置不同. 解决思路: 查看文档:http://document.thinkphp.cn/manua ...