Shell编程小技巧


Shell编程

系统函数调用

# 通用脚本执行后显示成功或失败

source /etc/init.d/functions
action /bin/true

日志筛选重定向

tail -f /usr/aa.log |awk '{ print $0 ;fflush()}' >>out.txt

tail -f会产生一个未关闭的输出流,输出流向标准输出打印与写入文件的流程是不一致的,数据写入文件需先写出到pipe缓冲区,等待输出流关闭后,数据才会自动写到缓冲区中,完成文件写入;故需要调用ffush强制刷新数据到缓冲区中;

强制拷贝

\cp -f file1  file2

操作系统环境变量默认配置了cp alias = cp -i,故使用cp -f 拷贝覆盖一个已存在文件时仍然会出现提示,反斜线\ 强制系统不读取alias别名,直接使用环境变量中真实cp命令进行文件拷贝;

搜索增强

# 递归搜索包含软链
find -rL path -name 'keyword'

非交互式操作crontab

方案一:

crontab -l  >crontab.conf  # 导出现有定时任务

echo "* * * * * /bin/bash /home/user/demo.sh" >> crontab.conf  # 追加新增定时任务至任务列表

crontab crontab.conf  # 将列表配置项生效至定时任务(覆盖模式)

rm -rf crontab.conf   # 删除导出生成列表

方案二:

# 直接编辑定时任务列表文件  /var/spool/cron/目录下以用户名命名文件为对应用户下定时任务列表
echo "* * * * * /bin/bash demo.sh" >> /var/spool/cron/root

内置变量

$0:表示当前执行的脚本名;

$?:获取上一条命名执行返回的状态,0为成成功,其他为失败;

$*:表示传递给脚本或函数的所有参数,多个参数以空格分隔;

"$*":表示传递给脚本或函数的所有参数组合成的一个整体,无法分割;

$@:表示传递给脚本或函数的所有参数,多个参数以空格分隔;(不带引号时与$*可互相替换使用)

"$@":表示传递给脚本或函数的所有参数,多个参数以空格分隔;(与不带引号时无差别)


文章作者: Semon
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Semon !
评论
  目录