温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

node中如何使用shell脚本

发布时间:2021-03-22 09:21:54 来源:亿速云 阅读:356 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关node中如何使用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 });    }  })  }

回调

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

node中如何使用shell脚本

execFile

  • 第一个参数:要调用的外部程序,这里是要读取的文件

  • 第二个参数:传给外部程序的参数(必须要放在数组里面)

  • 第三个参数:回调函数,在回调中可以回去外部程序的执行结果

shell

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

#$1文档最外层目录 $2当前修改的文件名 $3当前修改文件的目录 cd $(pwd)/gitlib/docs/$1 echo "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/$1 else   # 处理gitbook类型文档   gitbook build   echo "复制文档"   cp -rf ./_book/* ../../../public/docs/$1 fi

参数接收

  • 根据业务调用时传参的数据来获取参数

  • 直接使用"$"来获取

  • 获取顺序就是数据传入顺序

  • 切记不是数组角标的取值 数组第一个参数就是$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.md for 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/$1 else   # 处理gitbook类型文档   gitbook build   echo "复制文档"   cp -rf ./_book/* ../../../public/docs/$1 fi

注意

  • 条件判断里面字符串要使用""双引号

  • 如果条件判断里面有变量(字符串) 变量也要添加""双引号

  • 条件判断[]后面要加上;并且一点要使用then才能继续执行

  • 条件判断最后要使用fi结尾

关于“node中如何使用shell脚本”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI