shell脚本和编程 | 青训营笔记

88 阅读2分钟

shell脚本和编程

学习shell的价值

  1. Linux服务器的基本操作和管理
  2. 前端 Node.js 服务的管理、问题排查、资源监控等运维操作
  3. 使用 shell 编写 TCE、SCM、Docker 脚本、完成服务编译和部署

课前准备

一台安装了 linux 系统的物理机或者云主机,可运行 shell 脚本

本地的 vscode 安装 Bash Debug 插件,并升级 bash 到 4.0 以上

Npm 全局安装 zx 依赖

Shell基础概念

概念

终端获取用户输入,展示运算结果的硬件设备

历程

Ken Thompson (来自贝尔实验室)在 1971 年为 UNIX开发了第一个 shell,称为 V6 shell

Stephen Bourne 在贝尔实验室 为 V7 UNIX 所开发的 Bourne shell,即sh

开源组织 GNU 为了取代 Bourne shell 开发的 Bourne-Again shell,即 Bash

命令和语法

变量

自定义变量:

作用域:当前shell

声明方式:=

规范: 字符串、整形、浮点型、日期型

环境变量

作用域:当前shell及其子域

声明方式: export、declare -x

系统环境变量:

作用域:所有 shell

声明方式: 启动加载

系统环境变量

$0:当前shell名称

$#:传入脚本的参数数量

$*:传入脚本的所有参数

$?:上条命令执行的状态码

$PS1:命令提示符

$HOME:用户主文件夹

$PATH:全局命令的搜索路径

运算符和引用

类型符号作用
算术运算符+ - * / % !&常规运算
逻辑运算符|| && !
比较运算符== != < >
引号双引号 ""部分引用、紧紧 $ ` \ 保留作用
单引号 ''完全引用、原样输出
反引号 ``执行命令
圆括号(())算术运算
()执行命令
命令连接||cmd1执行完返回码非0,则继续执行cmd2
&&cmd1执行完返回码为0,则继续执行cmd2
;cmd、cmd2 串行执行
后台运行&让命令在后台运行,可与nohup一起使用

管道

管道与管道符 |,作用是将前一个命令的结果传递给后面的命令

重定向

输出重定向符号

> :覆盖写入文件

>>:追加写入文件

2>:错误输出写入文件

&>:正确和错误输出统一写入到文件中

判断命令行

test、[、[[

可用于整数测试、字符串测试、文件测试

分支语句

语法1:

if condition;then
	程序段
elif condition;then
	程序段
else
	程序段
fi

语法2

case $变量 in:
	"第一个变量内容")
		程序段
		;;
	"第一个变量内容")
		程序段
		;;
		*)
		程序段
		;;
esac

函数

语法一:

funcName(){echo "abc";}

语法二:

function funcName(){echo "abc"}