news 2026/10/14 14:56:56

Shell脚本核心语法速查与实战技巧

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Shell脚本核心语法速查与实战技巧

1. Shell脚本基础认知

刚接触Shell脚本时,我总在各类语法间反复查阅手册。经过多年运维工作积累,这份速查清单已成为我的终端伴侣。不同于官方文档的冗长,这里整理的都是实际开发中最常用的30%核心语法,却能解决90%的日常需求。

Shell脚本本质是命令的批处理,但通过变量、流程控制和函数等特性,能实现复杂的自动化任务。无论是批量文件处理、定时任务调度还是服务状态监控,熟练使用Shell都能极大提升工作效率。本手册特别适合:

  • 需要编写自动化脚本的运维人员
  • 希望提升命令行效率的开发人员
  • 准备Linux相关认证的备考者

2. 变量操作精要

2.1 变量定义与引用

name="value" # 等号两侧不能有空格 echo $name # 基础引用 echo ${name} # 标准引用(推荐) echo "${name}_tail" # 字符串拼接

重要提示:变量名区分大小写,建议全大写命名常量,小写命名临时变量

2.2 特殊变量集锦

$0 # 脚本名称 $1-$9 # 位置参数 $# # 参数个数 $* # 所有参数(字符串) $@ # 所有参数(数组) $? # 上条命令退出码 $$ # 当前进程PID

2.3 数组操作技巧

arr=(v1 v2 v3) # 声明数组 echo ${arr[1]} # 访问元素 echo ${arr[@]} # 展开所有元素 echo ${#arr[@]} # 获取数组长度

3. 流程控制实战

3.1 条件判断范式

# 数值比较 if [ $a -eq $b ]; then echo "equal" elif [ $a -gt $b ]; then echo "greater" else echo "less" fi # 字符串判断 if [ -z "$str" ]; then echo "empty string" fi # 文件检测 if [ -f "/path/file" ]; then echo "regular file exists" fi

避坑指南:[ ]内两侧必须留空格,字符串变量建议用双引号包裹

3.2 循环结构大全

# for循环 for i in {1..5}; do echo $i done # while循环 while [ $count -lt 5 ]; do echo $count ((count++)) done # 遍历文件行 while read line; do echo $line done < file.txt

4. 函数与文本处理

4.1 函数定义规范

function greet() { local name=$1 # 局部变量 echo "Hello, $name" return 0 # 返回值(0-255) } greet "World" # 函数调用

4.2 文本处理三剑客

# grep过滤 grep "pattern" file.txt grep -v "exclude" file.txt # 反选 grep -c "count" file.txt # 计数 # sed替换 sed 's/old/new/g' file.txt sed -i.bak 's/old/new/' file.txt # 原地替换并备份 # awk处理 awk '{print $1}' file.txt # 打印首列 awk -F: '{print $1}' /etc/passwd # 指定分隔符

5. 实用技巧合集

5.1 调试与错误处理

set -x # 开启调试模式 set -e # 出错立即退出 trap "echo ERROR occurred" ERR # 错误捕获

5.2 日期与计算

date +%Y-%m-%d # 格式化日期 echo $((10 + 20)) # 算术运算 bc <<< "scale=2;10/3" # 浮点计算

5.3 文件操作备忘

find . -name "*.sh" -exec chmod +x {} \; # 批量赋权 tar -czvf archive.tar.gz dir/ # 压缩目录 md5sum file.txt # 计算校验和

6. 性能优化经验

6.1 避免常见性能陷阱

# 错误示例:频繁调用外部命令 for i in $(seq 1 100); do grep "pattern" file.txt > /dev/null done # 正确做法:使用内置语法 for ((i=0;i<100;i++)); do [[ "$(cat file.txt)" =~ "pattern" ]] done

6.2 高效文本处理对比

# 慢速方案 while read line; do echo ${line:0:10} done < large_file.txt # 快速方案 awk '{print substr($0,1,10)}' large_file.txt

7. 跨平台兼容方案

7.1 Shebang选择策略

#!/bin/bash # Linux标准路径 #!/usr/bin/env bash # 跨平台推荐

7.2 语法差异处理

# 检测Shell类型 if [ -n "$BASH_VERSION" ]; then echo "Running in Bash" elif [ -n "$ZSH_VERSION" ]; then echo "Running in Zsh" fi

这份手册中的每个语法点都经过生产环境验证。建议打印出来贴在工位,遇到问题时快速查阅比搜索引擎更高效。刚开始可能需要频繁参考,但坚持使用两周后,你会发现自己已经能流畅地写出健壮的Shell脚本了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 14:56:21

本体工程实战指南:从建模到可维护的完整落地路径

一、问题的起点&#xff1a;为什么本体总是"建起来容易&#xff0c;改起来难"假设你在一家制造企业负责设备维护知识管理。老板说&#xff1a;"把我们的设备维修知识做成知识图谱&#xff0c;以后 AI 能自动推荐维修方案。"你花 8 个月&#xff0c;请了领域…

作者头像 李华
网站建设 2026/10/14 14:55:45

DeepSeek与华为协同突破CUDA生态:AI模型迁移实战指南

1. 这不是“联手”&#xff0c;而是国产AI算力生态的临界点突破最近朋友圈和几个技术群都在刷一条消息&#xff1a;“DeepSeek突然开源&#xff01;联手华为破局英伟达CUDA生态垄断”。说实话&#xff0c;我看到标题第一反应是——这措辞太像营销稿了。作为在AI基础设施层摸爬滚…

作者头像 李华
网站建设 2026/10/14 14:54:17

MDPtoolbox实战:MATLAB策略迭代求解马尔可夫决策过程

简介&#xff1a;这是一套面向机器学习与强化学习初学者的马尔科夫决策过程&#xff08;MDP&#xff09;实践资料&#xff0c;聚焦策略迭代算法的 MATLAB 实现与原理讲解&#xff0c;可帮助读者在离散状态和动作空间中快速上手 MDP 建模、策略评估与策略改进流程。压缩包共 93 …

作者头像 李华
网站建设 2026/10/14 14:54:12

线性代数特征值与相似对角化的几何本质与考研实战

1. 这不是一本“刷题手册”&#xff0c;而是一张线性代数的思维导航图你翻开《李永乐复习全书线性代数》第五章&#xff0c;标题写着“特征值、特征向量、相似矩阵”&#xff0c;心里可能已经浮现出一连串画面&#xff1a;黑板上密密麻麻的λ符号、行列式|A−λE|0的展开过程、…

作者头像 李华
网站建设 2026/10/14 14:53:45

8G显存跑MiniMax-H3视频生成:720p二采优化实战

1. 项目概述&#xff1a;为什么“8G显存16G内存跑720p二采”值得专门写一篇&#xff1f;最近在几个AI绘图技术群和本地部署交流频道里&#xff0c;反复看到有人问&#xff1a;“我的笔记本是RTX 4060&#xff08;8G显存&#xff09;、32G内存&#xff0c;能不能跑MiniMax-H3&am…

作者头像 李华
网站建设 2026/10/14 14:53:12

大模型应用写不出单测?用 Mock 把 LLM 调用做成可回归的工程

授权与合规声明 本文为原创技术分享&#xff0c;所有示例代码均运行于作者自建的隔离环境&#xff0c;仅供学习交流。文中涉及的第三方模型与服务以各自官方文档为准&#xff0c;请在服务条款范围内使用。转载请保留出处。一、为什么 LLM 应用难测 1.1 依赖不可控&#xff1a;模…

作者头像 李华