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
作者
Cikaros
发布于
2024年9月6日
许可协议