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

80 阅读2分钟

前言

这是我参加【青训营 x 字节前端训练营】✍🏻 笔记创作活动的第 3 天

  • 使用的系统版本是 Ubuntu 22.04

学习价值

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

基础概念

  • 终端:获取用户输入,展示运算结果的硬件设备
  • tty: 和终端等价 在 Linux 中是输入输出环境
  • 终端模拟器: 比如 Mac中的 iTerm2等 关联虚拟tty的输入输出软件
  • Shell: 可以处理来自终端模拟器的输入,解释执行后输出结果给终端,也是一种编程语言
  • Bash: Shell的一种具体实现

语法和命令

  1. hello World
#!/bin/bash
echo "Hello World"
  1. 系统环境变量
$o     当前shell名称/脚本名称    
$#     传入脚本的参数数量    
$*     传入脚本的所有的参数   
$?     上调命令执行的状态码
$PS1   命令提示符
$HOME  用户主文件夹
$PATH  全局命令的搜索路径

3.管道

  • 管道与管道符 | 作用是将前一个命令的结果传递给后面的命令
  • 语法: cmd1 | cmd2
  • 要求 管道右侧的命令必须能接受标准输入才行 比如 grep命令,ls,mv 等不能直接使用, 可以使用xargs 预处理
  • 实例
#!/bin/bash
cat platform.access.log | grep ERROR
netstat -an | grep ESTABLISHED | wc -l
find . -maxdepth l -name "*.sh" | xargs ls -l
  1. 执行
  • shell脚本一般以.sh结尾 ,也可以没有 代码第一行需要指定使用什么命令解释器来执行
  1. 启动方式
# 文件名运行
./test.sh
# 解释器运行
bash ./test.sh
# source 运行
source ./test.sh

调试和前端集成

调试方法

  1. 普通 log 使用 echo printf
  2. 使用set命令
  3. 在Vscode中安装 Bash Debug
  4. 推荐插件:
    • shellman 代码提示和自动补全
    • shellcheck 代码语法校验
    • shell-format 代码格式化
    • Bash Debug 支持单步调试