首页前端开发JavaScriptnode中使用shell脚本的方法步骤

node中使用shell脚本的方法步骤

时间2024-02-01 05:04:03发布访客分类JavaScript浏览658
导读:收集整理的这篇文章主要介绍了node中使用shell脚本的方法步骤,觉得挺不错的,现在分享给大家,也给大家做个参考。 背景在开发中我们在特定的场合下可能需要一些脚本来批量处理我们的业务逻...
收集整理的这篇文章主要介绍了node中使用shell脚本的方法步骤,觉得挺不错的,现在分享给大家,也给大家做个参考。

背景

在开发中我们在特定的场合下可能需要一些脚本来批量处理我们的业务逻辑,在nodejs如何调用shell脚本呢?

新建

项目下新建脚本文件

touch newFile.sh

修改文件权限

chmod 777 newFile.sh 修改文件为可读可写可执行

nodejs调用

文件读取

//使用nodejs的子进程里面的文件读取方法const {
 exeCFile }
     = require(‘child_PRocess');
    

示例

DocsService.publishAllDocs = (req, res) =>
 {
     req.session.touch();
 const {
 docName, pathName, saveDocsList, docTyPE }
     = req.body;
     VAR docText = req.body.docText;
     var newGIT = req.body.newGit;
     //获取文件路径 var filepath = path.join(__dirname, '../../bin/rnsource/publishAllDocs.sh');
     var fileArr, fileName, spath, dirnameBack, docbackList = [], docbackPath, docPath = "";
     var username = req.session.user_name;
     var str = docName+'/'+ pathName + '|'+ username;
 var reg = new RegExp(`^(${
str}
    )`);
     saveDocsList.map((item, index)=>
{
       fileArr = item.pathName.split("/");
       fileName = fileArr[fileArr.length-1];
   if(docType == "docsify"){
     dirnameBack = fileName != "" ? `../../gitlib/docBackup/${
docName}
/docs/${
item.pathName}
`:`../../gitlib/docBackup/${
docName}
/docs/README.md`   }
else{
         spath = item.pathName.split(fileName)[0];
         dirnameBack = spath != "" ?'../../gitlib/docBackup/'+ docName+'/'+ spath +'/'+fileName:'../../gitlib/docBackup/'+ docName+'/' + fileName;
    }
       docbackPath = path.join(__dirname, dirnameBack);
       docbackList.push(docbackPath);
       docPath += docbackPath + " ";
 }
) docPath += "" //cwd设置当前路径 我这边设置的就是nodejs代码js当前的位置 execFile(filepath, [docName, docPath, docType], {
 cwd: '.' }
, function(err, stdout, stderr){
       LOGger.info(stdout);
   if(err){
     loggerFileError({
user:username,docName:docName,pathName:'all',operate:"gitBook文件一键发布",err}
    );
     res.json({
       respCode: -1,       errMsg: "一键发布失败"     }
)   }
else{
     res.json({
       respCode: 0,       msg: "一键发布成功"     }
)     gitPush({
 docName, fileName, docbackPath: docbackList, username, pathName, docType }
)     unblockFile({
 docName, username, pathName, reg }
    );
   }
 }
) }
    

回调

执行成功会返回脚本执行的命令

execFile

  • 第一个参数:要调用的外部程序,这里是要读取的文件
  • 第二个参数:传给外部程序的参数(必须要放在数组里面)
  • 第三个参数:回调函数,在回调中可以回去外部程序的执行结果

shell

publishAllDocs.sh 主意:此处说明的都是非window下的shell脚本 window的.bat脚本不在此处讲解

#$1文档最外层目录 $2当前修改的文件名 $3当前修改文件的目录cd $(pwd)/gitlib/docs/$1echo "come in"for item in $2;
 do  echo "${
item}
"  cp -f ${
item}
 ${
item/docBackup/docs}
    done# echo "初始化进入"echo "$(pwd)/gitlib/docs/$1"if [ "$3" == "docsify" ];
    then  #拷贝指定目录下的文件 如: $1/$3/$2 docs/cst/7e4ce1de04621e0b/  #如 cp -rf ../../docBackup/wireless/docs/cst/7e4ce1de04621e0b/10708d589eeDFffd.md ./docs/cst/7e4ce1de04621e0b/  cp -rf ./docs ../../../public/docs/$1else  # 处理gitbook类型文档  gitbook build  echo "复制文档"  cp -rf ./_book/* ../../../public/docs/$1fi

参数接收

  • 根据业务调用时传参的数据来获取参数
  • 直接使用"$"来获取
  • 获取顺序就是数据传入顺序
  • 切记不是数组角标的取值 数组第一个参数就是$1

for循环的使用

在shell使用for…in的形式

需要循环的循环体数据示例

"/Users/Desktop/work/docManager/docServer/gitlib/docBackup/mygitbook/docs/d09985fc67088b35/d09985fc67088b35.md /Users/Desktop/work/docManager/docServer/gitlib/docBackup/mygitbook/docs/d09985fc67088b35/d09985fc67088b35/6f7a2c61c9bac0a3.md /Users/Desktop/work/docManager/docServer/gitlib/docBackup/mygitbook/README.md /Users/Desktop/work/docManager/docServer/gitlib/docBackup/mygitbook/docs/d09985fc67088b35/d09985fc67088b35/6f7a2c61c9bac0a3.md "

shell脚本里面的循环体的数据比较特殊不是我们常规的数组或者json

直接就是以空格隔开的一个字符串 如: “a b c d e”

## $2就是脚本里面接收的业务的传参 按格式拼接好的数据 如上面数据示例## 循环使用 for...in 记得;
    后面一定要加上do去执行循环体 最后使用done结束循环## item循环体的每个子项 如:/Users/Desktop/work/docManager/docServer/gitlib/docBackup/mygitbook/docs/d09985fc67088b35/d09985fc67088b35.mdfor item in $2;
 do  echo "${
item}
"  cp -f ${
item}
 ${
item/docBackup/docs}
done## ${
item/docBackup/docs}
 字符串替换## 此处是吧item路径里面的docBackup替换成docs 详细解释请看下面的shell字符串替换

shell指定字符串替换

在JS里面我们可以使用replace去做字符串的替换,那么shell里面改如何实现?

示例:

string “abc12342341”

  • echo ${ string/23/bb} //abc1bb42341 替换一次
  • echo ${ string//23/bb} //abc1bb4bb41 双斜杠替换所有匹配
  • echo ${ string/#abc/bb} //bb12342341 #以什么开头来匹配,根php中的^有点像
  • echo ${ string/%41/bb} //abc123423bb %以什么结尾来匹配,根php中的$有点像

if条件判断的使用

语法

if[];
    then ...else ...fi

示例

## 条件判断是使用[]而不是()## []后面要加;
    if [ "$3" == "docsify" ];
    then  #拷贝指定目录下的文件 如: $1/$3/$2 docs/cst/7e4ce1de04621e0b/  #如 cp -rf ../../docBackup/wireless/docs/cst/7e4ce1de04621e0b/10708d589eedfffd.md ./docs/cst/7e4ce1de04621e0b/  cp -rf ./docs ../../../public/docs/$1else  # 处理gitbook类型文档  gitbook build  echo "复制文档"  cp -rf ./_book/* ../../../public/docs/$1fi

注意

  • 条件判断里面字符串要使用""双引号
  • 如果条件判断里面有变量(字符串) 变量也要添加""双引号
  • 条件判断[]后面要加上; 并且一点要使用then才能继续执行
  • 条件判断最后要使用fi结尾

到此这篇关于node中使用shell脚本的方法步骤的文章就介绍到这了,更多相关node使用shell脚本内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

您可能感兴趣的文章:
  • Node.js之http模块的用法
  • Nodejs探秘之深入理解单线程实现高并发原理
  • 搞懂什么是Node.js原来这么简单
  • node.js 全局变量的具体使用
  • Node8中AsyncHooks异步生命周期
  • nodejs的错误处理过程记录
  • node.js利用express自动搭建项目的全过程
  • nodejs处理tcp连接的核心流程
  • Nodejs 数组的队列以及forEach的应用详解
  • 比较node.js和Deno

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: JavaScript实现页面动态验证码的...下一篇:详解如何解决使用JSON.stringify...猜你在找的JavaScript相关文章 html font标签如何设置字体大小?html font标签属性用法介绍2022-05-16vue3+TypeScript+vue-router的使用方法2022-04-16vue3获取当前路由地址2022-04-16如何利用React实现图片识别App2022-04-16JavaScript展开运算符和剩余运算符的区别详解2022-04-16微信小程序中使用vant框架的具体步骤2022-04-16Vue elementUI表单嵌套表格并对每行进行校验详解2022-04-16如何利用Typescript封装本地存储2022-04-16微信小程序中wxs文件的一些妙用分享2022-04-16JavaScript的Set数据结构详解2022-04-16 其他相关热搜词更多phpjavapython程序员loadpost-format-gallery

若转载请注明出处: node中使用shell脚本的方法步骤
本文地址: https://pptw.com/jishu/594956.html
vue 中 get / delete 传递数组参数方法 使用Vue.js和MJML创建响应式电子邮件

游客 回复需填写必要信息