shell脚本连接mongodb数据库并对数据进行处理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了shell脚本连接mongodb数据库并对数据进行处理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4299字,纯文字阅读大概需要7分钟。
内容图文
shell定义
shell百度百科是这样解释的:shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
基本上shell分为两大类:
(1)图形界面shell(Graphical User Interface shell 即 GUI shell)
例如:应用最为广泛的Windows Explorer(微软的Windows系列操作系统),还有也包括广为人知的Linux shell,其中linux shell包括 X window manager,以及功能更强大的CDE、GNOME、KDE、XFCE。
(2)命令式shell(Command Line Interface shell,即 CLI shell)
例如:bash/sh/ksh/csh(Unix/Linux 系统)
示例:shell脚本连接mongodb数据库并对数据进行处理
(1)连接mongodb数据库
? 没有开启mongodb数据库验证:mongo ip/数据库 例如:mongo 192.168.208.1:27017/joe
? 开启了数据库验证:mongo -u root -p root --authenticationDatabase admin 192.168.208.1/joe
(2)直接先来一个例子
#!/bin/bash #执行的命令 #nohup /home/myshell/addData.sh > /home/myshell/logs/addData.log 2>&1 & #死循环 while true do #每天一点至二点之间执行 nowhour=`date '+%H'` if [ $nowhour == '01' ];then #获取当前日期和具体的时间 nowdate=`date -d 'now' +%Y%m%d` nowtime=`date -d 'now' +%Y%m%d\ %H:%M:%S` #时间格式注意:必须加上\,不然会报错 echo $nowtime"-----生成数据开始-----" #获取昨天的日期 dayago=`date -d 'yesterday' +%Y%m%d` #对日期加上单引号 yesterday=`(echo $dayago|sed "s/\w\+/'&'/g")` now=`(echo $nowdate|sed "s/\w\+/'&'/g")` #输出看看加上引号没有 echo $yesterday #连接mongodb数据库 mongo 192.168.208.1:27017/joe --eval " db.user.insert({ \"name\":\"kobe\", \"sex\":\"男\", \"age\":39 }); db.nba.insert({ \"name\":\"kobe\", \"sex\":\"男\", \"age\":39, \"optDate\":$now });" nowtim=`date -d 'now' +%Y%m%d\ %H:%M:%S` echo $nowtim"-----生成数据结束-----" exit fi sleep 1h done #给用户文件夹的操作权限:chown -R Joe /home/myshell #给文件可执行权限:chmod +x /home/myshell/addData.sh #vim 文件名 使用命令 :set ff? 可查看格式是dos还是unix 使用命令 :set ff=unix 可以将dos格式转换为unix格式 #--eval "" 冒号里面的内容是不能加上注释的,不然会报错
项目要求是对mongodb中的数据进行处理后再将处理后的数据插入数据库,这样避免查询的时候对数据进行处理,加快查询速度,由于公司的账号不是root权限,所以不能通过crontab定时任务去做,所以只能在后台启动一个线程一直循环运行,到达时间点后,再执行,我设定的时间是在凌晨一点到两点之间。
说说上面的shell经常踩的坑(LZ也是含着眼泪踩过来的,毕竟第一次写):
(1)写好shell后,如果你不是root账号登录,需要给你使用的用户授权文件夹的操作你才能对其传文件:chown -R Joe /home/myshell
(2)给写好的shell可执行权限:chmod +x /home/myshell/addData.sh
(3)执行后如果报错:bad interpreter: No such file or directory。多半的原因是因为你的shell文档的格式不对。(LZ是在Windows上的notepad++里面编写的shell,就会导致这个问题,当然你也可以通过notepad++来修改shell的格式和编码),这里介绍linux里的操作方法:
? 首先使用vi 或者 vim 打开shell
? 然后使用命令 :set ff? (查看当前shell的格式是dos还是unix)
? 如果是dos格式,使用命令 :set ff=unix,可以将shell格式修改为unix格式。
(4)nowtime=`date -d 'now' +%Y%m%d\ %H:%M:%S`,获取时间包括时分秒的时候,必须加上 \ 防止将空格转义导致报错。
(5)dayago=`date -d 'yesterday' +%Y%m%d`,获取时间的时候+后面不能有空格,必须连着写,而且等号后面不能有空格,LZ不会告诉你就因为这个搞了我半个小时。
(6)now=`(echo $nowdate|sed "s/\w\+/'&'/g")`,(因为LZ需要先查询出数据,然后处理后再写入处理好的数据,与上述例子无关),由于时间格式是String不是Date,所以需要将Date加上单引号,千万别写错。
(7)nohup /home/myshell/addData.sh > /home/myshell/logs/addData.log 2>&1 &,这个命令的意思:后台执行addData.sh,并将log写到addData.log文件中,2>&1表示:执行正确的信息和错误的信息都写到addData.log中。
(8)--eval " ":(这个命令还不是很懂,留着以后搞懂后再来更新),还是有注意点:
? --eval必须跟在连接数据库之后(即:数据库连接 (空格) --eval " ");
? 引号里面的内容不能有注释也就是 #.....
?引号里面的内容有特殊字符需要保留的需要在前面加上\,防止转义(\"name\":\"kobe\")
?引号里面可以连续写几个不同的数据库操作,需要使用分号(;)隔开
? 引号里面不可以使用shell的命令,比如 echo '-----开始-------',运行时会报错
(9)if [ $nowhour == '01' ],if后必须有空格,[ ] 左右也必须有空格。
(10)再介绍几种shell中加上引号或者替换空格的方法:
? 给属性加上引号
ret=`(echo a b c d|sed "s/\w\+/'&'/g")` echo $ret
输出 'a' 'b' 'c' 'd'
? 将空格替换为逗号
ret=`(echo a b c d|sed 's/\s\+/,/g')` echo $ret
输出 a,b,c,d
? 将空格替换为逗号的同时给属性加上单引号:
ret=`(echo a b c d|sed 's/\s\+/,/g')|sed "s/\w\+/'&'/g"` echo $ret
输出'a','b','c','d'
内容总结
以上是互联网集市为您收集整理的shell脚本连接mongodb数据库并对数据进行处理全部内容,希望文章能够帮你解决shell脚本连接mongodb数据库并对数据进行处理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。