Shell脚本和编程

您所在的位置:网站首页 tce文件 Shell脚本和编程

Shell脚本和编程

#Shell脚本和编程 | 来源: 网络整理| 查看: 265

学习Shell的价值 Linux服务器的基本操作和管理 前端Node.js服务的进程管理、问题排查、资源监控等运维操作 使用shell编写TCE、SCM、Docker脚本,完成服务编译和部署 准备 一台安装了Linux系统的物理机或者云主机,可运行shell脚本 本地的vscode安装Bash Debug插件,并升级bash到4.x以上 Npm全局安装zx依赖 1.Shell基础概念 概念

Shell和Bash的关系可以理解成类和实例的关系

发展

构成

语法和命令 类型作用域声明方式规范自定义变量当前shell=字符串、整型、浮点型、日期型环境变量当前shell及其子shellexport 、declare -x系统环境变量所有shell启动加载

自定义变量只能在父进程中用到,环境变量和系统环境变量在父进程和子进程中都可以使用

自定义变量 #!/bin/bash #变量名=环境名(等号左右不能空格) page_size=1 page_num=2 #将命令复制给变量 _ls=ls #将命令结果赋值给变量 file_list=$(ls -a) #默认字符串,不糊进行 + 运算 total=page_size*page_num 错错错 #声明变量为整型 let total=page_size*page_num declare -i total=page_size*page_num #导出环境变量 export total declare -x total 复制代码

系统环境变量

配置文件加载

修改了某个配置文件时,想让他在当前配置文件运行执行source ~/。bashrc

运算符和引用

管道

重定向

判断命令

例子:

要用双引号包裹

分支语句

语法1:if condition ;then

程序段

elif condition ;then

程序段

else

程序段

fi

连续判断

语法2:

case $变量 in:

"第一个变量内容”)

程序段

;;

"第一个变量内容")

程序段

;;

*)

程序段

;;

esac

循环 while循环

while condition ; do 程序段; done

until循环

until condition ; do 程序段;done

for 循环

for var in [words]; do 程序段;done

函数

语法一:funcName(){echo "abc";}

语法二:funcName(){echo "abc";}

注意:

shell自上而下执行,函数必须在使用前定义 函数获取变量和shell script类似,0代表函数名,后续参数通过0代表函数名,后续参数通过0代表函数名,后续参数通过1、$2...获取 函数内return 仅仅表示函数执行状态,不代表函数执行结果 返回结果一般使用echo、printf, 在外面使用$() 、 ``获取结果 如果没有return ,函数状态时上一条命令的执行状态,存储在$?中 模块化

常用命令

执行过程和原理 执行 shell脚本一般以 . sh结尾,也可以没有,这是一个约定;第一行需要指定用什么命令解释器来执行

1.#! /bin/bash

1 #! /usr/bin/env bash

2.启动方式

# 文件名运行 ./filename.sh #解释器运行 bash ./filename.sh #source 运行 source ./filename.sh 复制代码 执行过程

shell展开 大括号展开 (Brace Expansion){...} 波浪号展开(Tilde Expansion)~ 参数展开(Shell Parameter Expansion) 命令替换(Command Substitution) 数学计算(Arithmetic Expansion)$((..)) 文件名展开(Filename Expansion) * ? [..] 外壳文件名模式匹配 大括号展开 (Brace Expansion){...}

一般由三部分构成,前缀,一对大括号、后缀,大括号内可以是逗号分割的字符串序列,也可以是序列表达式{x..y[..incr]}

波浪号展开(Tilde Expansion)~

参数展开(Shell Parameter Expansion)

间接参数扩展

参数长度

空参数处理

参数部分删除

命令替换(Command Substitution)

数学计算(Arithmetic Expansion)$((..))

文件名展开(Filename Expansion) * ? [..] 外壳文件名模式匹配

调试和前端集成 调试 普通log,使用echo、printf 使用set命令 vscode debug插件

vscode配置

前端集成

exec和spawn的区别:

在 Node.js 中,exec() 和 spawn() 都是用于执行命令行命令的方法,但在使用方式和性能方面有所不同。

exec() 方法:

exec() 方法是异步执行命令的最简单方法之一,它默认执行 shell 的命令,并在 callback 函数中返回缓冲区输出。exec() 允许执行任何 shell 命令,而不仅限于 Node.js 环境下支持的命令。exec() 方法一次性执行整个命令,但当执行大量数据时,它可能会导致应用程序的内存飙升,因为它无法流式读取输出数据。

spawn() 方法:

spawn() 方法使用流的方式处理数据,与 exec() 方法不同,它可以同时执行多个命令,并且不会在内存使用方面出现问题。spawn() 方法也支持成批分段输出数据,避免了大量的缓冲区分配。spawn() 方法还允许进一步配置选项,例如设置输出格式、重定向输入和输出流等。

结论:总的来说,在对性能有要求的情况下,可以使用 spawn() 方法,而不是 exec() 方法。如果只需要执行简单的 shell 命令并且无需处理大量输出,可以选择 exec() 方法。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3