清理防火墙

执行命令函数

#!/bin/bash

# execute 函数:执行命令并在失败时报错退出
execute() {
    # 执行传入的命令
    "$@"

    # 检查上一条命令的执行状态
    local exit_status=$?
    if [ $exit_status -ne 0 ]; then
        echo "ERROR: 命令执行失败 [退出码: $exit_status]" >&2
        echo "失败的命令: $@" >&2
        echo "在脚本行号: ${BASH_LINENO[0]}" >&2
        exit $exit_status
    fi
}

# 使用示例:
echo "开始执行脚本..."

# 在每个需要检查的命令前添加 execute
execute ls /nonexistent_directory  # 这个命令会失败
execute echo "这行不会被执行"      # 上一命令失败后不会执行到这里

echo "脚本执行完成"

日志

#!/usr/bin/env bash
log() {
        echo "$SCRIPT_START_TIME: $1"
}

SCRIPT_START_TIME=$(date +'%Y-%m-%d %H:%M:%S %Z')

readonly LOG_FILE="/var/log/docker_install_$(date +%Y%m%d_%H%M%S).log"

# 颜色定义
readonly COLOR_RESET='\033[0m'
readonly COLOR_RED='\033[0;31m'
readonly COLOR_GREEN='\033[0;32m'
readonly COLOR_YELLOW='\033[1;33m'
readonly COLOR_BLUE='\033[0;34m'
readonly COLOR_CYAN='\033[0;36m'

# 带颜色的日志函数
function log() {
    local level="$1"
    local message="$2"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    local color=""
    local log_level=""

    case "$level" in
        "INFO")
            color="$COLOR_CYAN"
            log_level="INFO"
            ;;
        "ERROR")
            color="$COLOR_RED"
            log_level="ERROR"
            ;;
        "SUCCESS")
            color="$COLOR_GREEN"
            log_level="SUCCESS"
            ;;
        "WARNING")
            color="$COLOR_YELLOW"
            log_level="WARNING"
            ;;
        *)
            color="$COLOR_BLUE"
            log_level="$level"
            ;;
    esac

    # 控制台输出带颜色,文件输出不带颜色
    echo -e "${color}[$timestamp] [$log_level] $message${COLOR_RESET}" | tee -a >(sed "s/\x1B\[[0-9;]*[a-zA-Z]//g" >> "$LOG_FILE")
}

function log_info() {
    log "INFO" "$1"
}

function log_error() {
    log "ERROR" "$1"
}

function log_success() {
    log "SUCCESS" "$1"
}

function log_warning() {
    log "WARNING" "$1"
}

# 使用示例
log_info "开始安装Docker..."
log_success "Docker安装成功!"
log_error "安装过程中出现错误"
log_warning "这是一个警告信息"
for table in filter nat mangle raw security; do
  sudo iptables -t $table -F
  sudo iptables -t $table -X
done
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
#!/bin/bash

# 检查参数
if [ $# -ne 1 ]; then
    echo "用法: sh $0 <namespace>"
    exit 1
fi

NS="$1"

# 判断命名空间是否存在
if ! kubectl get namespace "$NS" >/dev/null 2>&1; then
    echo "命名空间 $NS 不存在"
    exit 2
fi

echo "命名空间 $NS 存在,遍历所有Pod引用的镜像:"

# 遍历所有Pod,输出镜像(去重)
kubectl get pods -n "$NS" -o jsonpath="{..image}" | tr ' ' '\n' | sort | uniq
#!/bin/bash

if [ $# -ne 1 ]; then
    echo "用法: sh $0 <namespace>"
    exit 1
fi

NS="$1"

# 判断命名空间是否存在
if ! kubectl get namespace "$NS" >/dev/null 2>&1; then
    echo "命名空间 $NS 不存在"
    exit 2
fi

echo "命名空间 $NS 存在,遍历所有Pod及其镜像:"

# 遍历所有Pod,输出pod名+镜像名(需安装jq)
kubectl get pods -n "$NS" -o json | jq -r '
  .items[] | 
  .metadata.name as $pod |
  (
    .spec.initContainers[]? | "\($pod)\tinitContainer\t\(.image)"
  ),
  (
    .spec.containers[]? | "\($pod)\tcontainer\t\(.image)"
  ),
  (
    .spec.ephemeralContainers[]? | "\($pod)\tephemeralContainer\t\(.image)"
  )
'
#!/bin/bash
usage() {
 echo "用法: $0 <lvName>"
 exit -1
}

lvName=$1
if [ -z "$lvName" ]; then
    usage
fi

lvPath="/dev/docker/$lvName"
if [ ! -e "$lvPath" ]; then
    echo "逻辑卷 $lvPath 不存在"
    exit 2
fi

lvID=$(lvdisplay "$lvPath" | grep "Block device" | awk '{print $(NF)}')
if [ -z "$lvID" ]; then
    echo "获取设备号失败"
    exit 3
fi

lvMinor=${lvID##*:}
lvMajor=${lvID%%:*}

devMapper="/dev/mapper/docker-${lvName//-/--}"

echo "lv=$lvPath major=$lvMajor minor=$lvMinor"
echo "devMapper=$devMapper"

sudo mknod "$devMapper" b $lvMajor $lvMinor
sudo ln -sf "$devMapper" "$lvPath"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容