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

149 阅读3分钟

Shell是一种程序设计语言,常用于在Unix、Linux和macOS等操作系统中编写脚本。Shell脚本可以批量执行命令、处理文本和文件等操作。

Shell执行过程和原理:

Shell执行过程可以分为:读入、解析和执行三个步骤。

  1. 读入:Shell首先读取用户输入的命令,包括命令名、选项和参数等。
  2. 解析:Shell解析命令,将命令分解为命令名、参数、选项等。同时,Shell执行通配符扩展、变量替换和命令替换等操作。
  3. 执行:Shell执行解析后的命令,通常会调用系统内部的命令或者用户自定义的Shell函数。

Shell调试和前端集成:

  1. 调试:Shell脚本调试常用的命令有set、echo、trap和shopt等。set可以用来设置Shell的一些特性,例如调试模式、处理空格和其他一些标志等。echo可以输出变量和调试信息,用于调试Shell脚本。trap用于捕获Shell中的错误信息,以便更好地调试代码。shopt则可以控制Shell的行为,例如设置Shell在执行命令时是否继续和如何处理空格等。
  2. 前端集成:前端开发人员可以使用Shell脚本来管理项目中的依赖,例如使用npm脚本执行前端构建工具。通过在package.json中配置scripts属性,可以定义一系列的脚本任务,例如运行开发服务器、构建和部署。
    例如,以下是一个package.json中的scripts定义:
"scripts": {
  "start": "webpack-dev-server --config webpack/config.js",
  "build": "webpack --config webpack/config.js",
  "deploy": "sh deploy.sh"
}

**

其中,"start"和"build"任务是使用webpack构建和运行开发服务器,"deploy"任务则是运行一个deploy.sh脚本,完成代码的部署工作。

Shell是一种非常强大的脚本语言,它可以用来完成很多系统管理和批处理任务。对于前端开发者来说,学习Shell语言可以帮助他们更好地管理项目依赖和完成自动化构建。同时,深入理解Shell执行原理以及调试技巧也能够提升开发效率和代码质量。

Shell的具体应用

一、应用

  1. 系统管理:使用Shell脚本可以快速地完成一些系统管理任务,例如启动、停止服务,更新系统等。
  2. 批处理:使用Shell脚本可以一次执行多个命令,快速地完成批处理任务,例如处理大量的日志文件。
  3. 自动化部署:前端开发者可以使用Shell脚本来自动化部署前端项目,例如将项目代码自动上传至服务器并启动服务。
  4. 系统监控:使用Shell脚本可以实现系统监控,例如检查系统中某个服务是否运行正常,是否达到了预设的阈值等。

二、示例代码

  1. 系统管理

启动、停止服务

#!/bin/bash
# 启动服务
sudo service serviceName start
# 停止服务
sudo service serviceName stop

**

更新系统

#!/bin/bash
# 更新apt-get包列表信息
sudo apt-get update
# 更新已安装包到最新版本
sudo apt-get upgrade

**

  1. 批处理

处理大量日志文件,找出里面包含关键字的行

#!/bin/bash
# 遍历所有日志文件
for file in /logs/*.log
do
  # 查找文件中包含的关键字,并将其输出到日志文件
  grep "keyword" $file >> /logs/keyword.log
done

**

备注:如果日志文件很大,可以使用适当的方法来分段处理,例如按日期分割日志文件。

  1. 自动化部署

将前端项目代码自动上传至服务器并启动服务

#!/bin/bash
# 上传项目代码至服务器
scp -r /path/to/project user@server:/path/to/destination
# 进入服务器目录并启动服务
ssh user@server "cd /path/to/destination && npm run start"

**

备注:其中,npm run start是项目中定义的启动命令,可以是任何前端项目所使用的启动命令。

  1. 系统监控

检查系统中某个服务是否运行正常

#!/bin/bash
# 查看服务状态
status=$(sudo service serviceName status)
# 判断服务状态,如果服务没有运行,就重启服务
if [[ $status == *"not running"* ]]; then
  sudo service serviceName restart