Shell脚本模版
最近业务中常常需要编写一些脚本,故有此文。
统一模版
#!/bin/bash
# 脚本名称: <脚本名称>
# 描述: <脚本描述>
# 版本: <版本>
# 作者: Cikaros
# 邮箱: Cikaros<at>qq.com
# 日期: <日期>
# 版权: (C) 2024 Your Company. All rights reserved.
# 配置环境 与下述内容反之
set +e
# 配置环境 当存在错误及时停止
set -e
VERSION=1.0
...
# 使用提示
usage() {
echo "Usage: $0 [options]"
echo "options:"
echo " -h, --help 显示帮助信息"
echo " -v, --version 显示版本信息"
exit 1
}
# 参数处理
while [[ "$#" -gt 0 ]]; do
case $1 in
-h|--help) usage ;;
-v|--version) echo "Version: $VERSION"; exit ;;
*) echo "Unknown option: $1"; usage ;;
esac
shift
done
# 无参数时的默认逻辑
main() {
echo "default code"
}
# 脚本入口点
main "$@"
常用功能
判断文件(夹)是否存在
if [ -e "/path/to/file/or/dir" ]; then
echo "存在"
else
echo "不存在"
fi
不存在则创建:
[ ! -d "/path/to/dir" ] && mkdir -p "/path/to/dir"
判断是否为普通文件
if [ -f "/path/to/file/or/dir" ]; then
echo "是"
else
echo "不是"
fi
判断变量是否为空
if [ -z "$VAR" ]; then
echo "为空"
else
echo "有值"
fi
用户输入数据
# 提示信息 变量接收
read -p "提示信息" VAR
判断指令是否存在
if type "command" &>/dev/null; then
echo "command 存在"
else
echo "command 不存在"
fi
判断关键字是否存在
if echo "$FILE_NAME" | grep -q "XL"; then
...
else
...
fi
文件夹递归处理
find "/path/to/dir" -type f -name "*.txt" | while read FILE_PATH; do
echo "正在处理文件:$FILE_PATH"
FILE_NAME_WITH_EXT=$(basename "$1")
FILE_NAME="${FILE_NAME_WITH_EXT%.*}"
#TODO
done
Shell脚本模版
https://blog.cikaros.top/doc/e7dab5c2.html