本文整理了Shell脚本中常用的自定义函数,涵盖文件操作、系统监控、网络管理、用户交互等场景,每个函数均提供详细注释,助力提升脚本开发效率。
基础文件操作
文件/目录存在性检查
1 2 3 4 5 6 7 8 9 10 11 12 13
|
file_exists() { [ -f "$1" ] && echo "✅ File exists." || echo "❌ File does not exist." }
dir_exists() { [ -d "$1" ] && echo "📂 Directory exists." || echo "📂 Directory does not exist." }
|
文件属性获取
1 2 3 4 5 6 7 8 9 10 11 12 13
|
get_file_size() { du -sh "$1" 2>/dev/null | awk '{print $1}' }
last_modified_file() { ls -t "$1" 2>/dev/null | head -n 1 }
|
系统信息查询
系统状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
is_root() { [ "$(id -u)" -eq 0 ] && echo "👑 Root user" || echo "🚫 Not root user" }
get_ip() { hostname -I | awk '{print $1}' }
system_load() { uptime | awk -F'load average:' '{print $2}' | xargs }
|
资源监控
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
memory_usage() { free | awk '/Mem/{printf("%.1f%%"), ($3/$2)*100}' }
cpu_usage() { top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}' }
check_disk_space() { threshold=${2:-80} usage=$(df -h "$1" 2>/dev/null | awk 'NR==2{print $5}' | cut -d'%' -f1) [ "$usage" -ge "$threshold" ] && echo "⚠️ Disk over $threshold%: $usage%" || echo "✅ OK ($usage%)" }
|
时间与日期
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
current_date() { date +"%Y-%m-%d" }
current_time() { date +"%H:%M:%S" }
date_diff() { from=$(date -d "$1" +%s) to=$(date -d "$2" +%s) echo $(( (to - from)/(60*60*24) )) }
|
日志与备份和分析
1 2 3 4 5 6 7 8 9 10
| backup_file() { cp -v "$1" "${1}_$(date +%Y%m%d_%H%M%S).bak" 2>/dev/null }
log_message() { local log_file=${2:-/var/log/myapp.log} echo "[$(date +%Y-%m-%d\ %H:%M:%S)] $1" >> "$log_file" }
|
网络与服务管理
网络连通性
1 2 3 4 5 6 7 8 9 10 11 12 13
|
ping_check() { ping -c 1 "$1" &> /dev/null && echo "✅ $1 reachable" || echo "❌ unreachable"; }
http_status() { curl -s -o /dev/null -w "%{http_code}" "$1"; }
|
端口与服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
is_port_open() { ss -tuln | grep -q ":$1\b" && echo "✅ Port $1 is open" || echo "❌ Port $1 is closed" }
service_status() { systemctl is-active --quiet "$1" && echo "🟢 $1 is running" || echo "🔴 $1 is stopped" }
restart_service() { systemctl restart "$1" && echo "🚀 Service $1 restarted" || echo "❌ Failed to restart $1" }
|
用户交互与验证
确认提示
1 2 3 4 5 6 7 8
|
confirm() { read -p "$1 确认(y/n) " -n 1 -r echo [[ $REPLY =~ ^[Yy]$ ]] || exit 1 }
|
参数验证函数
1 2 3 4 5 6
|
require_arg() { [ $# -eq 0 ] && echo "❌ Missing argument" && exit 1 }
|
进程管理
进程操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
find_pid() { pgrep -f "$1" || echo "PID not found" }
kill_process() { kill "$1" && echo "✅ Killed $1" || echo "❌ Failed" }
|
压缩与解压
压缩函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
tar_compress() { tar -czf "${1}.tar.gz" -C "$(dirname "$1")" "$(basename "$1")" }
tar_decompress() { tar -xzf "$1" -C "${2:-.}" }
|
权限与安全
权限控制函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
set_permissions() { chmod "${2:-755}" "$1" && echo "✅ Permissions set" || echo "❌ Failed" }
change_owner() { chown "${1}:${2}" "$3" && echo "✅ Ownership changed" || echo "❌ Failed" }
|
增强功能函数
彩色输出与提示
1 2 3 4 5 6 7 8 9 10 11
| print_color() { local text=$1 color=$2 case $color in red) echo -e "\033[31m$text\033[0m" ;; green) echo -e "\033[32m$text\033[0m" ;; yellow) echo -e "\033[33m$text\033[0m" ;; blue) echo -e "\033[34m$text\033[0m" ;; *) echo "$text" ;; esac }
|
安全与随机化
1 2 3 4 5 6 7
|
generate_random_string() { length=${1:-10} tr -dc 'a-zA-Z0-9' < /dev/urandom | fold -w "$length" | head -n 1 }
|
参数验证
1 2 3 4 5 6 7 8 9 10
| command_exists() { command -v "$1" >/dev/null 2>&1 && return 0 || return 1 }
safe_function() { [ $# -ne 1 ] && echo "❌ Usage: $0 <arg>" && exit 1 }
|