bash写shell脚本常用的一些命令总结
QQ群:397745473
让代码颜色丰富
1 | #######color code######## |
通常调用一键远程脚本的方法
1 | source <(curl -sL https://git.io/trojan-install) |
用date打日志的方法
1 | date "+【%Y-%m-%d %H:%M:%S】 The configuration file already exists!" 2>&1 | tee -a $logPath |
shell if判断写成一行
1 | [[ $? -eq 0 ]] && echo "backup $i success" || exit |
获取24小时前的日期存入变量
1 | resultsName=$(date -d @$((`date +%s`-3600*24)) '+%Y%m%d') |
shell中各种括号的作用
1 | shell中各种括号的作用()、(())、[]、[[]]、{} |
这里常用:= 仔细读上表收获非常大。
shell 判断是否已安装了某个软件
1 | # 判断是否安装了node |
shell脚本添加crontab
使用shell脚本或命令行 添加crontab 定时任务
crontab 是运维过程中常用的定时任务执行工具
一般情况下在有新的定时任务要执行时,使用crontab -e ,将打开一个vi编辑界面,配置好后保存退出,但是在自动化运维的过程中往往需要使用shell脚本或命令自动添加定时任务。
接下来结束三种(Centos)自动添加的crontab 任务的方法:
使用 crontab - 命令加载管道输出
1 | # crontab_job="* * * * * echo world" |
其中,crontab - 可以读取管道传输过来的crontab配置。
将需要添加的定时任务echo到crontab -l的结果后面,再通过管道传输给crontab - 进行加载,便完成了添加;
通过grep -v去除crontab -l 中想要删除的定时任务,再传给crontab -加载配置完成删除。
一条命令就完成了crontab任务的添加和删除,非常方便。
其他更多方法
方法一:
编辑 /var/spool/cron/用户名 文件,如:
1 | echo "* * * * * hostname >> /tmp/tmp.txt" >> /var/spool/cron/root |
优点:简单
缺点:需要root权限
方法二:
编辑 /etc/crontab 文件,
1 | echo "* * * * * root hostname >> /tmp/tmp.txt" >> /etc/crontab |
需要注意的是:
与常用的crontab 有点不同,/etc/crontab 需指定用名。
而且该文件定义为系统级定时任务 不建议添加非系统类定时任务,编辑该文件也需要root权限
方法三:
利用crontab -l 加 crontab file 两个命令实现自动添加
1 | crontab -l > conf && echo "* * * * * hostname >> /tmp/tmp.txt" >> conf && crontab conf && rm -f conf |
由于crontab file会覆盖原有定时任务,所以使用 crontab -l 先导出原有任务到临时文件 “conf” 再追加新定时任务
优点:不限用户,任何有crontab权限的用户都能执行
缺点:稍微复杂
shell 字符串操作(长度,查找,替换)
在做shell批处理程序时候,经常会涉及到字符串相关操作。
有很多命令语句,如:awk,sed都可以做字符串各种操作。
其实shell内置一系列操作符号,可以达到类似效果,大家知道,
使用内部操作符会省略启动外部程序等时间,因此速度会非常的快。
1 | 原文参考:https://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html |
一、判断读取字符串值
表达式 | 含义 |
---|---|
${var} | 变量var的值, 与$var相同 |
${var-DEFAULT} | 如果var没有被声明, 那么就以$DEFAULT作为其值 * |
${var:-DEFAULT} | 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 * |
${var=DEFAULT} | 如果var没有被声明, 那么就以$DEFAULT作为其值 * |
${var:=DEFAULT} | 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 * |
${var+OTHER} | 如果var声明了, 那么其值就是$OTHER, 否则就为null字符串 |
${var:+OTHER} | 如果var被设置了, 那么其值就是$OTHER, 否则就为null字符串 |
${var?ERR_MSG} | 如果var没被声明, 那么就打印$ERR_MSG * |
${var:?ERR_MSG} | 如果var没被设置, 那么就打印$ERR_MSG * |
${!varprefix*} | 匹配之前所有以varprefix开头进行声明的变量 |
${!varprefix@} | 匹配之前所有以varprefix开头进行声明的变量 |
加入了“*” 不是意思是: 当然, 如果变量var已经被设置的话, 那么其值就是$var.
1 | [chengmo@localhost ~]$ echo ${abc-'ok'} |
二、字符串操作(长度,读取,替换)
表达式 | 含义 |
---|---|
```$ |