之前备份Docker下的MySQL数据库,我都是这样写的: docker exec mysql sh -c 'exec mysqldump somedatabase -uroot -pmy-secret-pw' > /opt/somedatabase-dump.sql somedatabase 是某个数据库的名字,-p后面的是密码,如果密码包含了复杂的特殊字符密码,例如里面含有$@!等字符,就会提示密码不正确。 解决方案是把密码作为变量,并且修改写法,如下: MYSQL_PASSWORD='mysqlpwd@…

2023-09-23 0条评论 227点热度 0人点赞 admin 阅读全文

Windows下也可以执行类似Linux上的shell操作,例如要执行定时任务做备份等等。 安装地址:https://git-scm.com/download/win下载好安装包,一路下一步就可以了 运行程序中的Git Bash,出现以下界面:   基本上Linux下的基础命令在这里都能使用了(例如cd vim ls等等)。 有一个需求,例如在Windows下定期到一台Linux服务器上获取备份文件,我们写好了get_backup.sh,如下: #! /bin/sh # 定期当前的日期 nowdate=`…

2022-09-16 0条评论 1859点热度 0人点赞 admin 阅读全文

Shell脚本来替换指定某一行的内容,之前有的文章有介绍,使用了命令,详见:https://blog.terrynow.com/2021/03/14/shell-sed-file-content-add-replace-delete-and-special-characters/ 不过使用里面介绍的: sed -i '3c 替换后的内容' /path/to/file.txt 是会报错的: sed: 1: "/path/to/file.txt ...": invalid command code T 经查,MacOS…

2022-09-15 0条评论 378点热度 0人点赞 admin 阅读全文

在写Shell脚本的时候,有时候需要在文件指定的行上插入内容,但是又不方便用vim做交互的动作,这就可以用到『sed』命令来做到 假设我们准备好了test.txt文件,内容如下: echo -e "第1行\n第2行\n第3行\n第4行" > /tmp/test.txt cat /tmp/test.txt 第1行 第2行 第3行 第4行 示例1:在test.txt最开始第一行,加上『插入的内容』 # 插入的内容就是第几行,例如这个最开始插入内容 sed -i '1 i 插入的内容' /tmp/test.txt …

2022-09-13 0条评论 535点热度 0人点赞 admin 阅读全文

Linux上查询日志的时候,需要查找到某个关键词,并显示出这个关键词所在的行的前后多少行,来分析。 正常使用搜索关键词的命令是 在关键词的基础上显示前后几行的命令是: # 获取someKeywords的前10行 cat /path/to/logfile.log | grep "someKeywords" -B 10 # 获取someKeywords的后10行 cat /path/to/logfile.log | grep "someKeywords" -A 10 # 获取someKeywords的前后10行 cat…

2022-09-08 0条评论 550点热度 0人点赞 admin 阅读全文

有时候在写脚本的时候,遇到一些字符串的变量,会有换行等需要整体替换,例如需要把换行全部替换成\n Shell下可以使用真是表达式的方式来替换:${varName//$'\n'/\\n},例子如下: msg="第一行 第二行 第三行" msg=${msg//$'\n'/\\n} echo $msg # 会输出:第一行\n第二行\n第三行 说明: ${...} - 表示利用正则表达式替换 varName - 变量 // - 表示替换... $'\n' - 需要替换的字符 / - 替换成... \\n - 需要替换成的字…

2022-06-24 0条评论 596点热度 0人点赞 admin 阅读全文

有时候Linux下运行的程序并不一定是一个服务,但是我们希望能监测它的运行状态,例如是否进程还在运行,如果没有运行,发出警报,或者自动启动,进而能保持程序的持续运行。 我们可以想办法写一个脚本来监测,然后可以做到定时任务(crontab)里去,例如每个1分钟监测一次。 以下是脚本内容,可以将替换成再次启动程序或你的逻辑。 #!/bin/bash # pgrep -f "vdcserver" 不能这样使用,不然就监测到本身也是一个符合的进程,导致误判 if pgrep -x "vdcserver" > /dev…

2022-06-12 0条评论 836点热度 1人点赞 admin 阅读全文

Linux环境Shell下需要检查某个URL返回的状态代码,例如200,说明正常,否则说明异常,需要发送提醒、重新启动等等操作 简单的脚本举例如下(以返回代码是200正常,否则重启某个服务): status_code=$(curl --write-out %{http_code} --silent --output /dev/null http://127.0.0.1:8182/some_status) if [[ "$status_code" -ne 200 ]] ; then echo "program not…

2022-05-30 0条评论 574点热度 1人点赞 admin 阅读全文

Linux下查看进程状态可以使用ps命令,例如,可以看到PID或者CPU、内存使用率等。 如果想要找到特定的程序的进程,那么可以配合使用grep查找出特定的进程PID,因为在执行shell脚本的时候,本身自己也是一个进程,如果用grep很有可能把自己也列出来,所以需要如下方式: (把name换成具体的关键词,使用grep -v grep把自己排除掉) ps -ef | grep "name" | grep -v grep | awk '{print $2}' 这个例子就是赋值给PID变量: PID=$(ps -ef…

2022-05-25 0条评论 937点热度 0人点赞 admin 阅读全文

Linux的Shell时间和格式化,可以用在自动备份脚本中,有关Linux备份的示例,可以参考:https://blog.terrynow.com/2020/12/29/linux-bash-backup-script/ # 当前日期,格式化成类似:2021-12-20 nowdate=`date +%Y-%m-%d` echo $nowdate # 获得当前时间,格式类似:20220108-092211 nowdatetime=`date +%Y%m%d-%H%M%S` echo $nowdatetime 获得多…

2022-01-08 0条评论 615点热度 0人点赞 admin 阅读全文