Shell脚本高效编写技巧

Shell脚本高效编写技巧

变量处理与字符串操作

使用${var}替代$var可以避免歧义,例如${var}_suffix。字符串截取可通过${var:start:length}实现,${var#pattern}能删除最短匹配前缀。

检查变量是否为空:

bash 复制代码
[ -z "$var" ] && echo "Empty"

错误处理与调试
set -e使脚本在命令失败时立即退出,set -x打印执行的命令方便调试。使用trap捕获信号:

bash 复制代码
trap 'cleanup; exit 1' SIGINT SIGTERM

数组与循环

现代Shell支持数组操作:

bash 复制代码
arr=(item1 item2)
for i in "${arr[@]}"; do
    echo "$i"
done

参数解析

使用getopts处理命令行选项:

bash 复制代码
while getopts ":a:b:" opt; do
    case $opt in
        a) arg1="$OPTARG";;
        b) arg2="$OPTARG";;
        \?) echo "Invalid option";;
    esac
done

文件处理技巧

逐行读取文件:

bash 复制代码
while IFS= read -r line; do
    echo "$line"
done < file.txt

检查文件属性:

bash 复制代码
[ -f "$file" ]   # 常规文件
[ -d "$dir" ]    # 目录
[ -r "$file" ]   # 可读

数学运算

使用$(( ))进行整数运算:

bash 复制代码
result=$(( (a + b) * c ))

子shell与进程替换

( )创建子shell隔离环境,进程替换实现命令输出作为文件:

bash 复制代码
diff <(cmd1) <(cmd2)

高效文本处理

组合使用grep, awk, sed等工具:

bash 复制代码
grep "pattern" file | awk '{print $2}' | sed 's/old/new/g'

跨平台兼容性

使用#!/usr/bin/env bash提高可移植性。避免依赖非POSIX特性时注明Shell要求。

相关推荐
xyz5992 小时前
如何在 WSL 中删除指定版本的 Ubuntu 以及安装
linux·运维·ubuntu
linux修理工2 小时前
Claude code与CC-switch安装使用
运维·人工智能
小叶lr2 小时前
jenkins打包前端样式丢失/与本地不一致问题
运维·前端·jenkins
Agent产品评测局2 小时前
互联网行业自动化平台选型,运营全流程提效指南:2026企业级智能体架构与实战全解析
运维·人工智能·ai·chatgpt·架构·自动化
亚空间仓鼠2 小时前
OpenEuler系统常用服务(五)
linux·运维·服务器·网络
minji...3 小时前
Linux 线程同步与互斥(二) 线程同步,条件变量,pthread_cond_init/wait/signal/broadcast
linux·运维·开发语言·jvm·数据结构·c++
the sun343 小时前
从 QEMU 直接启动到 U-Boot 引导:嵌入式 Linux 启动流程的本质差异
linux·运维·服务器
三思守心3 小时前
从 0 到 1 搭建自动化内容工厂:深度测评楼兰AI及其在全平台发帖中的表现
运维·服务器·自动化
草莓熊Lotso3 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·linux·运维·服务器·数据库·c++·mysql
ShineWinsu4 小时前
对于Linux:文件操作以及文件IO的解析
linux·c++·面试·笔试·io·shell·文件操作