shell skill - awokezhou/LinuxPage GitHub Wiki
概述
本文记录shell脚本的一些使用技巧
帮助信息
if [ $# -ne 0 ] && [ $1 == "--help" -o $1 == "-h" ]; then
printf -- '...usage...\n';
#...
exit 0;
fi;
该代码判断用户执行参数,当参数长度$#
不为0同时第一个参数为--help
或者-h
时,显示帮助信息
获取当前工作路径
workdir=$(cd $(dirname $0); pwd)
等待和进度
#!/bin/sh
printf -- 'Performing asynchronous action..';
./trigger-action;
DONE=0;
while [ $DONE -eq 0 ]; do
./async-checker;
if [ "$?" = "0" ]; then DONE=1; fi;
printf -- '.';
sleep 1;
done;
printf -- ' DONE!\n';
循环等待异步脚本执行结果,并打印内容到屏幕,让用户知道程序仍然在运行
以不同颜色显示
#!/bin/sh
printf -- 'doing something... \n';
printf -- '\033[37m someone output \033[0m\n';
printf -- '\033[32m SUCCESS: yay \033[0m\n';
printf -- '\033[33m WARNING: hmm \033[0m\n';
printf -- '\033[31m ERROR: fubar \033[0m\n';
37m为白色,32m为绿色,33m为橙色,31m为红色
出现错误的处理
set -e表示出现错误立即触发EXIT,退出脚本,set +e表示不管出现任何错误继续执行脚本。如果脚本是有状态的(每个后续步骤都依赖前一个步骤),那么请使用set -e,在脚本出现错误时立即退出脚本。如果要求所有命令都要执行完(很少会这样),那么就使用set +e。
结束时打印一个新行
#!/bin/sh
# ... your awesome script ...
printf -- '\n';
exit 0;
因为printf不会另起一行打印
快速删除大文件夹和大文件
xxx/data/ /* 假如data文件夹是你想要删除的文件夹 / mkdir null / 建立一个目录 */ rsync --delete-before -d null/ xxx/data/
data.log