论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
主机系统
›
linux
›
shell脚本本领—创建和清空文件
shell脚本本领—创建和清空文件
立聪堂德州十三局店
论坛元老
|
2024-10-22 23:33:17
|
显示全部楼层
|
阅读模式
楼主
主题
2385
|
帖子
2385
|
积分
7155
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
写这篇文章的起因是由于在分析一个脚本时,看到这么一句脚本,如下所示
................................
>$RMAN_BACKUP/script/rman_backup.sql
................................
复制代码
最开始我以为它就是将文件rman_backup.sql清空,这个类似于 cat /dev/null > $RMAN_BACKUP/script/rman_backup.sql命令。但是实际调试过程发现它的功能不局限于此。其实它的功能为:如果文件不存在时创建这么一个空文件,如果文件存在时清空该文件。猜测编写者就是想通过这么一句简单代码去实现这样的两个功能,他都懒得去写一段逻辑判定:"如果文件不存在就创建空的文件,如果文件存在就清空文件"。说这个脚本精妙吧,倒也谈不上。但是也确实够精简,代价就是阅读起来晦涩难懂。尤其对shell脚本不精通的人。只是shell编程中确实有一些奇淫本领.这里不谈其优点与缺点,存在既是合理。
那么在shell中,有哪些创建文件的本领呢?下面简单总结一下,方便以后编写shell脚本时使用,也方便你阅读shell代码。
方法1
touch命令可以用来创建一个空文件,如果文件已经存在,则会更新当时间戳。
案例
if [ ${MYSQL_SERVICE_EXISTS} -eq 1 ] && [ -f "$MYSQL_SERVICE_FILE" ]; then
touch /usr/lib/systemd/system/mysqld.service
chmod 644 /usr/lib/systemd/system/mysqld.service
cat >/usr/lib/systemd/system/mysqld.service <<EOF
..................................
..................................
fi
复制代码
一般会用上面这种写法居多,使用最上面那种写法倒是比较少见。另有一些结合重定向符与其它命令实现的,如下所示
................................
echo "[error]:`date '+%Y%m%d %H:%M:%S'`> $log_msg" > $LOG_FILE
................................
复制代码
方法3:
使用tee命令可以用来读取标准输入并将其写入到文件和标准输出。如果文件不存在,tee命令会创建它
案例
printf "it is test!\n" > filename.txt
复制代码
方法4:
使用cat命令创建一个文件,如下所示,这里使用Here Document( filename
案例
>$RMAN_BACKUP/script/rman_backup.sql
rman_backup |tee -a $RMAN_BACKUP/rman_backup.sql
复制代码
方法4
truncate命令可以用来减少文件的大小,将其设置为0字节,从而清空文件。
cat >/usr/lib/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
# Have mysqld write its state to the systemd notify socket
Type=notify
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Start main service
ExecStart=/opt/mysql/mysql8.0/bin/mysqld --defaults-file=/data/mysql/conf/my.cnf $MYSQLD_OPTS
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 100000
Restart=on-failure
RestartPreventExitStatus=1
# Set environment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1
PrivateTmp=false
EOF
复制代码
方法5
: > filename.txt 这种方式来清空文件.
> mysql_error.log
复制代码
其中:表示什么也不做。前面命令中它会清空文件内容(截断文件);与rm差别,由于rm实际上会完全删除文件。此外,如果文件不存在,则 :>filename.txt 实际上会创建该文件。更多关于这个命令的介绍如下所示,参考What is :>filename.txt Doing?[1]文中内容。
echo '' > mysql_error.log
复制代码
参考资料[1] 1:
https://unix.stackexchange.com/questions/552436/what-is-filename-txt-doing
扫描上面二维码关注我
如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
立聪堂德州十三局店
论坛元老
这个人很懒什么都没写!
楼主热帖
零信任介绍
哈夫曼应用
WPF开发随笔收录-获取软件当前目录的坑 ...
《微信小程序-基础篇》什么是组件化以 ...
【iOS逆向与安全】frida-trace入门 ...
VMware虚拟机安装Linux教程(超详细) ...
2021年7月整理--简单方法 暴力破解WIFI ...
django使用多个数据库实现
sqlserver字符串拼接
计算机等级考试二级C语言上机题集(第1 ...
标签云
渠道
国产数据库
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
人工智能
前端开发
快速回复
返回顶部
返回列表