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