最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

node中使用shell腳本的方法步驟

 更新時(shí)間:2021年03月21日 10:14:03   作者:淺夏晴空  
這篇文章主要介紹了node中使用shell腳本的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

背景

在開發(fā)中我們?cè)谔囟ǖ膱?chǎng)合下可能需要一些腳本來(lái)批量處理我們的業(yè)務(wù)邏輯,在nodejs如何調(diào)用shell腳本呢?

新建

項(xiàng)目下新建腳本文件

touch newFile.sh

修改文件權(quán)限

chmod 777 newFile.sh 修改文件為可讀可寫可執(zhí)行

nodejs調(diào)用

文件讀取

//使用nodejs的子進(jìn)程里面的文件讀取方法

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設(shè)置當(dāng)前路徑 我這邊設(shè)置的就是nodejs代碼js當(dāng)前的位置
 execFile(filepath, [docName, docPath, docType], { cwd: '.' }, function(err, stdout, stderr){
   logger.info(stdout);
   if(err){
     loggerFileError({user:username,docName:docName,pathName:'all',operate:"gitbook文件一鍵發(fā)布",err});
     res.json({
       respCode: -1,
       errMsg: "一鍵發(fā)布失敗"
     })
   }else{
     res.json({
       respCode: 0,
       msg: "一鍵發(fā)布成功"
     })
     gitPush({ docName, fileName, docbackPath: docbackList, username, pathName, docType })
     unblockFile({ docName, username, pathName, reg });
   }
 }) 
}

回調(diào)

執(zhí)行成功會(huì)返回腳本執(zhí)行的命令

execFile

  • 第一個(gè)參數(shù):要調(diào)用的外部程序,這里是要讀取的文件
  • 第二個(gè)參數(shù):傳給外部程序的參數(shù)(必須要放在數(shù)組里面)
  • 第三個(gè)參數(shù):回調(diào)函數(shù),在回調(diào)中可以回去外部程序的執(zhí)行結(jié)果

shell

publishAllDocs.sh 主意:此處說(shuō)明的都是非window下的shell腳本 window的.bat腳本不在此處講解

#$1文檔最外層目錄 $2當(dāng)前修改的文件名 $3當(dāng)前修改文件的目錄
cd $(pwd)/gitlib/docs/$1
echo "come in"
for item in $2; do
  echo "${item}"
  cp -f ${item} ${item/docBackup/docs}
done
# echo "初始化進(jìn)入"
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 "復(fù)制文檔"
  cp -rf ./_book/* ../../../public/docs/$1
fi

參數(shù)接收

  • 根據(jù)業(yè)務(wù)調(diào)用時(shí)傳參的數(shù)據(jù)來(lái)獲取參數(shù)
  • 直接使用"$"來(lái)獲取
  • 獲取順序就是數(shù)據(jù)傳入順序
  • 切記不是數(shù)組角標(biāo)的取值 數(shù)組第一個(gè)參數(shù)就是$1

for循環(huán)的使用

在shell使用for…in的形式

需要循環(huán)的循環(huán)體數(shù)據(jù)示例

"/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腳本里面的循環(huán)體的數(shù)據(jù)比較特殊不是我們常規(guī)的數(shù)組或者json

直接就是以空格隔開的一個(gè)字符串 如: “a b c d e”

## $2就是腳本里面接收的業(yè)務(wù)的傳參 按格式拼接好的數(shù)據(jù) 如上面數(shù)據(jù)示例
## 循環(huán)使用 for...in 記得;后面一定要加上do去執(zhí)行循環(huán)體 最后使用done結(jié)束循環(huán)
## item循環(huán)體的每個(gè)子項(xiàng) 如:/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 詳細(xì)解釋請(qǐng)看下面的shell字符串替換

shell指定字符串替換

在JS里面我們可以使用replace去做字符串的替換,那么shell里面改如何實(shí)現(xiàn)?

示例:

string “abc12342341”

  • echo ${string/23/bb} //abc1bb42341 替換一次
  • echo ${string//23/bb} //abc1bb4bb41 雙斜杠替換所有匹配
  • echo ${string/#abc/bb} //bb12342341 #以什么開頭來(lái)匹配,根php中的^有點(diǎn)像
  • echo ${string/%41/bb} //abc123423bb %以什么結(jié)尾來(lái)匹配,根php中的$有點(diǎn)像

if條件判斷的使用

語(yǔ)法

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 "復(fù)制文檔"
  cp -rf ./_book/* ../../../public/docs/$1
fi

注意

  • 條件判斷里面字符串要使用""雙引號(hào)
  • 如果條件判斷里面有變量(字符串) 變量也要添加""雙引號(hào)
  • 條件判斷[]后面要加上;并且一點(diǎn)要使用then才能繼續(xù)執(zhí)行
  • 條件判斷最后要使用fi結(jié)尾

到此這篇關(guān)于node中使用shell腳本的方法步驟的文章就介紹到這了,更多相關(guān)node使用shell腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • NodeJs模擬登陸正方教務(wù)

    NodeJs模擬登陸正方教務(wù)

    網(wǎng)上已經(jīng)有很多關(guān)于模擬登陸正方教務(wù)的作品了,基于 PHP,Python,Java,.Net 加上NodeJs,這幾門語(yǔ)言都可以實(shí)現(xiàn)模擬登陸,模擬登陸的技術(shù)點(diǎn)不是特別難,這里記錄一下利用Node碰到的一些坑,以及一些解決思路。
    2017-04-04
  • node.js實(shí)現(xiàn)爬蟲教程

    node.js實(shí)現(xiàn)爬蟲教程

    這篇文章主要為大家介紹了node.js基礎(chǔ)模塊http、網(wǎng)頁(yè)分析工具cherrio實(shí)現(xiàn)爬蟲的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • NVM安裝nodejs的方法實(shí)用步驟

    NVM安裝nodejs的方法實(shí)用步驟

    安裝node的方式有很多種,本文主要介紹了NVM安裝nodejs的方法實(shí)用步驟,希望能幫助大家來(lái)解決問(wèn)題,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Node.js靜態(tài)文件服務(wù)器改進(jìn)版

    Node.js靜態(tài)文件服務(wù)器改進(jìn)版

    這篇文章主要介紹了Node.js靜態(tài)文件服務(wù)器改進(jìn)版的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • node.js到底要不要加分號(hào)淺析

    node.js到底要不要加分號(hào)淺析

    這篇文章主要給大家介紹了關(guān)于node.js到底要不要加分號(hào)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 帶你了解NodeJS事件循環(huán)

    帶你了解NodeJS事件循環(huán)

    這篇文章主要介紹NodeJS事件循環(huán),Node中代碼從上到下同步執(zhí)行,在執(zhí)行過(guò)程中會(huì)將不同的任務(wù)添加到相應(yīng)的隊(duì)列中,那具體有的循環(huán)又是怎么回事呢,限免現(xiàn)編就帶大家學(xué)習(xí)該詳細(xì)內(nèi)容,需要的朋友也可以參考一下
    2022-02-02
  • Node.js用readline模塊實(shí)現(xiàn)輸入輸出

    Node.js用readline模塊實(shí)現(xiàn)輸入輸出

    在學(xué)C++的時(shí)候,有cout和cin,Java也有println和Scanner控件,Node.js也有如同C++和Java的標(biāo)準(zhǔn)輸入,當(dāng)然,是用JavaScript實(shí)現(xiàn)的,它就是Readline模塊。下面這篇文章就給大家詳細(xì)介紹一下readline模塊,來(lái)實(shí)現(xiàn)Node.js的控制臺(tái)輸入輸出。有需要的可以參考借鑒。
    2016-12-12
  • Node.js動(dòng)手?jǐn)]一個(gè)靜態(tài)資源服務(wù)器的方法

    Node.js動(dòng)手?jǐn)]一個(gè)靜態(tài)資源服務(wù)器的方法

    這篇文章主要介紹了Node.js動(dòng)手?jǐn)]一個(gè)靜態(tài)資源服務(wù)器的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • 使用PM2實(shí)現(xiàn)高效的應(yīng)用監(jiān)控與管理功能

    使用PM2實(shí)現(xiàn)高效的應(yīng)用監(jiān)控與管理功能

    PM2?是一個(gè)流行的進(jìn)程管理器,用于?Node.js?應(yīng)用程序,它支持應(yīng)用程序的負(fù)載均衡、自動(dòng)重啟、日志管理、監(jiān)控以及多環(huán)境管理等功能,本文給大家介紹了如何使用PM2實(shí)現(xiàn)高效的應(yīng)用監(jiān)控與管理功能,需要的朋友可以參考下
    2024-02-02
  • 基于Alpine Linux構(gòu)建前端node-web鏡像步驟詳解

    基于Alpine Linux構(gòu)建前端node-web鏡像步驟詳解

    這篇文章主要為大家介紹了基于Alpine Linux構(gòu)建前端node-web鏡像步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11

最新評(píng)論

万源市| 河北区| 上高县| 咸丰县| 永清县| 龙州县| 渭南市| 儋州市| 安陆市| 澄江县| 鄄城县| 衡阳市| 茶陵县| 延吉市| 涡阳县| 德令哈市| 佳木斯市| 绥化市| 奉节县| 应城市| 娱乐| 天门市| 永新县| 东源县| 南宁市| 庄浪县| 兴安县| 桑日县| 河间市| 怀集县| 佛冈县| 灌阳县| 安塞县| 色达县| 井陉县| 海阳市| 津市市| 久治县| 涞源县| 即墨市| 通城县|