解决sh脚本不在同级目录的问题

问题:

  1. shell脚本在多个目录,多层级目录下。
  2. 想使用一个新的shell脚本去调用并直接执行对应的脚本。

编写脚本 run_all_scripts.sh

情况1: 单层主目录

#!/bin/bash

# 遍历 project01 目录下的所有子目录
for dir in project01/*; do
  # 检查是否为目录
  if [ -d "$dir" ]; then
    # 遍历该目录下的所有 .sh 文件
    for script in "$dir"/*.sh; do
      # 检查是否为文件
      if [ -f "$script" ]; then
        echo "Executing $script"
        # 执行脚本
        bash "$script"
      fi
    done
  fi
done

情况2: 多个主目录

#!/bin/bash

# 定义要遍历的顶级目录数组
directories=("project01" "project02")

# 遍历每个顶级目录
for top_dir in "${directories[@]}"; do
  # 遍历顶级目录下的所有子目录
  for dir in "$top_dir"/*; do
    # 检查是否为目录
    if [ -d "$dir" ]; then
      # 遍历该目录下的所有 .sh 文件
      for script in "$dir"/*.sh; do
        # 检查是否为文件
        if [ -f "$script" ]; then
          echo "Executing $script"
          # 执行脚本
          bash "$script"
        fi
      done
    fi
  done
done

情况3: 脚本位置不同

#!/bin/bash

# 遍历 project01 目录下的所有子目录
for dir in project01/*; do
  # 检查是否为目录
  if [ -d "$dir" ]; then
    # 遍历该目录下的所有 .sh 文件
    for script in "$dir"/*.sh; do
      # 检查是否为文件
      if [ -f "$script" ]; then
        echo "Executing $script"
        # 执行脚本
        bash "$script"
      fi
    done
  fi
done

# 遍历 project02 目录下的所有 .sh 文件
for script in project02/*.sh; do
  # 检查是否为文件
  if [ -f "$script" ]; then
    echo "Executing $script"
    # 执行脚本
    bash "$script"
  fi
done

情况4: 带参数执行指定脚本

注意: 参数名称在各脚本中需要统一

#!/bin/bash

BASH_PATH="/home/project"
# 日志文件
LOG_FILE="$BASH_PATH/execution.log"

# 定义记录日志的函数
log() {
    local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
    echo "[$timestamp] $1" >> $LOG_FILE
    echo "[$timestamp] $1"
}

# 默认参数值
UPDATE_MODULE="${UPDATE_MODULE}"
log "当前更新模块: $UPDATE_MODULE"

# 如果传递了参数,则使用传递的参数
if [ "$#" -ge 1 ]; then
  UPDATE_MODULE="$1"
fi

echo "$UPDATE_MODULE"

# 遍历 project01 目录下的所有 .sh 文件
for script in $BASH_PATH/project01/*.sh; do
  # 检查是否为文件
  if [ -f "$script" ]; then
    log "Executing $script with UPDATE_MODULE=$UPDATE_MODULE"
    # 执行脚本并捕获输出和错误
    output=$(bash "$script" "$UPDATE_MODULE" 2>&1)
    echo "Output of $script: $output"
  fi
done

调整带参数的情况

#!/bin/bash

set -e 

BASH_PATH="/mnt/project"
# 日志文件
LOG_FILE="$BASH_PATH/project01_execution.log"

# 定义记录日志的函数
log() {
    local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
    echo "[$timestamp] $1" | tee -a $LOG_FILE
}

# 默认参数值
UPDATE_MODULE="${UPDATE_MODULE:-all}"
log "当前更新模块: $UPDATE_MODULE"

# 如果传递了参数,则使用传递的参数
if [ "$#" -ge 1 ]; then
  UPDATE_MODULE="$1"
fi

echo "$UPDATE_MODULE"

# 遍历 project01目录下的所有 .sh 文件
for script in $BASH_PATH/project01/*.sh; do
  # 检查是否为文件
  if [ -f "$script" ]; then
    log "Executing $script with UPDATE_MODULE=$UPDATE_MODULE"
    # 实时打印脚本输出和错误
    bash "$script" "$UPDATE_MODULE" 2>&1 | tee -a $LOG_FILE
  fi
done

最后,授权并执行测试脚本

chmod +x run_all_scripts.sh
./run_all_scripts.sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值