久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

shell腳本連接mongodb數(shù)據(jù)

 hongjing_z 2023-05-24 發(fā)布于上海

shell定義

shell百度百科是這樣解釋的:shell俗稱殼(用來(lái)區(qū)別于核),,是指“為使用者提供操作界面”的軟件(命令解析器)。它類似于DOS下的command.com和后來(lái)的cmd.exe,。它接收用戶命令,,然后調(diào)用相應(yīng)的應(yīng)用程序。

基本上shell分為兩大類:

(1)圖形界面shell(Graphical User Interface shell 即 GUI shell)

  例如:應(yīng)用最為廣泛的Windows Explorer(微軟的Windows系列操作系統(tǒng)),,還有也包括廣為人知的Linux shell,,其中l(wèi)inux shell包括 X window manager,以及功能更強(qiáng)大的CDE,、GNOME,、KDE、XFCE,。

(2)命令式shell(Command Line Interface shell,,即 CLI shell)

  例如:bash/sh/ksh/csh(Unix/Linux 系統(tǒng))

示例:shell腳本連接mongodb數(shù)據(jù)庫(kù)并對(duì)數(shù)據(jù)進(jìn)行處理

(1)連接mongodb數(shù)據(jù)庫(kù)

  ? 沒(méi)有開(kāi)啟mongodb數(shù)據(jù)庫(kù)驗(yàn)證:mongo ip/數(shù)據(jù)庫(kù)    例如:mongo 192.168.208.1:27017/joe

  ? 開(kāi)啟了數(shù)據(jù)庫(kù)驗(yàn)證:mongo -u root -p root --authenticationDatabase admin 192.168.208.1/joe

(2)直接先來(lái)一個(gè)例子

#!/bin/bash

#執(zhí)行的命令
#nohup /home/myshell/hello.sh > /home/myshell/logs/addData.log 2>&1 &


#死循環(huán)
while true
do
        #每天一點(diǎn)至二點(diǎn)之間執(zhí)行
        nowhour=`date '+%H'`
        if [ $nowhour == '01' ];then
        #獲取當(dāng)前日期和具體的時(shí)間
        nowdate=`date -d 'now' +%Y%m%d`
        nowtime=`date -d 'now' +%Y%m%d\ %H:%M:%S`   #時(shí)間格式注意:必須加上\,不然會(huì)報(bào)錯(cuò)
        #獲取當(dāng)前時(shí)間的秒數(shù)
        nowSecond=`date +%s -d 'now'`
        echo $nowtime"-----生成數(shù)據(jù)開(kāi)始-----"
        #獲取昨天的日期
        dayago=`date -d 'yesterday' +%Y%m%d`
        #對(duì)日期加上單引號(hào)
        yesterday=`(echo $dayago|sed "s/\w\+/'&'/g")`
        now=`(echo $nowdate|sed "s/\w\+/'&'/g")`
        #輸出看看加上引號(hào)沒(méi)有
        echo $yesterday
        #連接mongodb數(shù)據(jù)庫(kù)
        mongo 192.168.248.129:27017/joe --eval "
            db.user.insert({
                \"name\":\"kobe\",
                \"sex\":\"男\(zhòng)",
                \"age\":39
                });
                db.nba.insert({
                \"name\":\"kobe\",
                \"sex\":\"男\(zhòng)",
                \"age\":39,
                \"optDate\":$now
                });"
        nowtim=`date -d 'now' +%Y%m%d\ %H:%M:%S`
        nowSeconds=`date +%s -d 'now'`
        times=$(($nowSeconds-$nowSecond))
        #休眠時(shí)間=一個(gè)小時(shí)減去腳本所消費(fèi)的時(shí)間
        t=$((3600-$times))
        echo $nowtim"-----生成數(shù)據(jù)結(jié)束-----"
        sleep $t
        else
            sleep 1h
        fi 
done



#給用戶文件夾的操作權(quán)限:chown -R Joe /home/myshell
#給文件可執(zhí)行權(quán)限:chmod +x /home/myshell/addData.sh
#vim 文件名  使用命令 :set ff?   可查看格式是dos還是unix 使用命令 :set ff=unix 可以將dos格式轉(zhuǎn)換為unix格式
#--eval "" 冒號(hào)里面的內(nèi)容是不能加上注釋的,,不然會(huì)報(bào)錯(cuò)

  項(xiàng)目要求是對(duì)mongodb中的數(shù)據(jù)進(jìn)行處理后再將處理后的數(shù)據(jù)插入數(shù)據(jù)庫(kù),,這樣避免查詢的時(shí)候?qū)?shù)據(jù)進(jìn)行處理,加快查詢速度,,由于公司的賬號(hào)不是root權(quán)限,所以不能通過(guò)crontab定時(shí)任務(wù)去做,,所以只能在后臺(tái)啟動(dòng)一個(gè)線程一直循環(huán)運(yùn)行,,到達(dá)時(shí)間點(diǎn)后,再執(zhí)行,,我設(shè)定的時(shí)間是在凌晨一點(diǎn)到兩點(diǎn)之間,。 

說(shuō)說(shuō)上面的shell經(jīng)常踩的坑(LZ也是含著眼淚踩過(guò)來(lái)的,畢竟第一次寫(xiě)):

(1)寫(xiě)好shell后,,如果你不是root賬號(hào)登錄,,需要給你使用的用戶授權(quán)文件夾的操作你才能對(duì)其傳文件:chown -R Joe /home/myshell

(2)給寫(xiě)好的shell可執(zhí)行權(quán)限:chmod +x /home/myshell/addData.sh

(3)執(zhí)行后如果報(bào)錯(cuò):bad interpreter: No such file or directory。多半的原因是因?yàn)槟愕膕hell文檔的格式不對(duì),。(LZ是在Windows上的notepad++里面編寫(xiě)的shell,,就會(huì)導(dǎo)致這個(gè)問(wèn)題,當(dāng)然你也可以通過(guò)notepad++來(lái)修改shell的格式和編碼),,這里介紹linux里的操作方法:

  ? 首先使用vi  或者 vim 打開(kāi)shell

  ? 然后使用命令 :set ff? (查看當(dāng)前shell的格式是dos還是unix)

  ? 如果是dos格式,,使用命令 :set ff=unix,,可以將shell格式修改為unix格式。

(4)nowtime=`date -d 'now' +%Y%m%d\ %H:%M:%S`,,獲取時(shí)間包括時(shí)分秒的時(shí)候,,必須加上防止將空格轉(zhuǎn)義導(dǎo)致報(bào)錯(cuò)。

(5)dayago=`date -d 'yesterday' +%Y%m%d`,,獲取時(shí)間的時(shí)候+后面不能有空格,,必須連著寫(xiě),而且等號(hào)后面不能有空格,,LZ不會(huì)告訴你就因?yàn)檫@個(gè)搞了我半個(gè)小時(shí),。

(6)now=`(echo $nowdate|sed "s/\w\+/'&'/g")`,(因?yàn)長(zhǎng)Z需要先查詢出數(shù)據(jù),,然后處理后再寫(xiě)入處理好的數(shù)據(jù),,與上述例子無(wú)關(guān)),由于時(shí)間格式是String不是Date,,所以需要將Date加上單引號(hào),,千萬(wàn)別寫(xiě)錯(cuò)。

(7)nohup  /home/myshell/addData.sh > /home/myshell/logs/addData.log 2>&1 &,,這個(gè)命令的意思:后臺(tái)執(zhí)行addData.sh,,并將log寫(xiě)到addData.log文件中,2>&1表示:執(zhí)行正確的信息和錯(cuò)誤的信息都寫(xiě)到addData.log中,。

(8)--eval " ":(這個(gè)命令還不是很懂,,留著以后搞懂后再來(lái)更新),還是有注意點(diǎn):

    ? --eval必須跟在連接數(shù)據(jù)庫(kù)之后(即:數(shù)據(jù)庫(kù)連接  (空格) --eval " "),;

    ? 引號(hào)里面的內(nèi)容不能有注釋也就是 #.....

    ?引號(hào)里面的內(nèi)容有特殊字符需要保留的需要在前面加上\,,防止轉(zhuǎn)義(\"name\":\"kobe\")

    ?引號(hào)里面可以連續(xù)寫(xiě)幾個(gè)不同的數(shù)據(jù)庫(kù)操作,需要使用分號(hào)(;)隔開(kāi)

    ? 引號(hào)里面不可以使用shell的命令,,比如 echo '-----開(kāi)始-------',,運(yùn)行時(shí)會(huì)報(bào)錯(cuò)

(9)if [ $nowhour == '01' ],if后必須有空格,,[ ] 左右也必須有空格,。

(10)再介紹幾種shell中加上引號(hào)或者替換空格的方法:

  ? 給屬性加上引號(hào)

ret=`(echo a b c d|sed "s/\w\+/'&'/g")`  
 
echo $ret

輸出 'a' 'b' 'c' 'd'

  ? 將空格替換為逗號(hào)

ret=`(echo a b c d|sed 's/\s\+/,/g')`  
 
echo $ret

輸出 a,b,c,d

  ? 將空格替換為逗號(hào)的同時(shí)給屬性加上單引號(hào):

ret=`(echo a b c d|sed 's/\s\+/,/g')|sed "s/\w\+/'&'/g"`  
 
echo $ret

 輸出'a','b','c','d'

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多