Shell编程基础与脚本规范

104 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情

shell脚本概述

shell脚本的概念

  • 将执行的命令按顺序保存到一个文本文件
  • 给该文件可执行权限
  • 可结合各种shell控制语句以完成更复杂的的操作

shell脚本应用场景

  • 重复性操作
  • 交互性任务
  • 批量事务处理
  • 服务运行状态监控
  • 定时任务执行

shell的作用

命令解释器,“翻译官”

  • 介于系统内核与用户之间,负责解释命令行(用户输入相关的指令,shell将指令转化成二进制语言,传递给内核执行)

linux自带的shell文件

检查一下 /etc/shells这个文件,里面就是linux所包含的shell

最常用的就是bash,tcsh,csh,sh,nologin这些shell。这些shell都是依据linux发展者的不同所创造出的不同版本

bash:基准于GNU的框架下发展出的shell

csh:语法优点类似于c语言的shell

tcsh:整合了csh,提供更多功能

sh:已经被bash所替换

nologin:奇怪的shell,这个shell可以让用户无法登录主机

PS:bash(/bin/bash)是目前大多数linux版本采用的默认shell

image.png

shell脚本的作用

  • 自动化运维
  • 批量化重复操作可以编写脚本结合计划任务自动周期运行
  • 减轻管理员工作量
  • 提高处理文本文件的速度
  • 避免配置出错
shell是一个面向字符串的编程语言,可以跟python之类的其他语言配合起来,比如某个复杂的功能使用一个python脚本来实现,然后在shell中调用这个脚本实现较复杂的功能,或者反过来,在python脚本中调用外部的shell脚本来提高自动化的效率,也是可以的

shell 可针对 linux 系统自动化运维和状态监控

python 可 针对 通过APR接口对 应用程序做 数据的收集,统计和分析

强类型编辑语言

  • int
  • string
  • c
  • c++
  • JAVA
  • GO

shell脚本的构成

  • 脚本申明(解释器):若第一行为“#!/bin/bash” 或者省略, 表示此行以下的代码语句是通过/bin/bash 程序来解释此行, #!默认解释器。比如#!/usr/bin/python, #!/usr/bin/expect
  • 注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行
  • 可执行语句(代码块):比如echo命令,用于输出“ ”之间的字符串

image.png

命令运行脚本

  • 会在脚本的子shell环境中执行脚本中的代码

  • 指定绝对路径或者相对路径指定脚本的路径运行,要求脚本文件必须有执行权限 x

image.png

  • bash

image.png

  • sh

image.png

  • source

image.png

  • .

image.png

.和source一样作用的(使用当前shell环境执行脚本里的代码,也就是脚本文件终端二代目或者命令会影响环境)

管道操作 |

将管道符号“|”  左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道符号

xargs  可以把管道符号传递的参数作为对象传递给右边

xxx  |   如果管道符号右边一定需要执行对象命令,则管道符号后面一定要有  xarges  命令来传递执行参数

'' 和${} 一样是命令替换的作用

重定向操作

交互式硬件设备

  • 标准输入:从该设备接收用户输入的数据
  • 标准输出:从改设备向用户输出d饿数据
  • 标准错误:通过该设备报告执行出错的数据

image.png

image.png

  • '>'

image.png

  • '>>'

image.png

  • 2>

image.png

  • 2>>

image.png