执行命令函数
#!/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"
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。