编程语言分类与 Shell 脚本编写执行方式全解析

编程语言分类与 Shell 脚本编写执行方式全解析

从计算机语言发展脉络到 Shell 实战技巧


1. 编程语言分类:从宏观视角看语言家族

编程语言的分类方法有很多,这里我从执行方式抽象层次用途领域三个维度来分析。


1.1 按执行方式分类

  1. 编译型语言

    • 代表:C、C++、Go、Rust
    • 特点:代码需经过编译器一次性翻译成机器码,执行效率高,部署前需编译。
    • 优势:运行速度快、内存占用低
    • 劣势:开发周期稍长,调试需要重新编译
  2. 解释型语言

    • 代表:Python、JavaScript、PHP、Shell
    • 特点:逐行解释执行,不需要单独编译步骤,运行灵活
    • 优势:开发快、跨平台性好
    • 劣势:运行速度相对慢
  3. 混合型语言(编译+解释)

    • 代表:Java、C#、Kotlin
    • 特点:先编译成中间字节码(bytecode),再由虚拟机(JVM、.NET CLR)解释/即时编译(JIT)执行
    • 优势:兼顾跨平台与性能
    • 劣势:虚拟机启动和内存开销较大

1.2 按抽象层次分类

  • 低级语言:直接面向硬件(机器语言、汇编语言)
  • 高级语言:面向人类逻辑(Python、Java、C)
  • 领域专用语言(DSL):特定领域使用(SQL、HTML、正则表达式)

1.3 按用途领域分类

  • 系统编程语言:C、Rust(写内核、驱动、操作系统)
  • 应用开发语言:Java、Python、C#、Go
  • 脚本语言:Shell、Perl、Ruby、Python(自动化任务、批处理)
  • 数据科学语言:R、Python、Julia
  • Web 前端语言:JavaScript、TypeScript

2. Shell 脚本编写与执行方式

Shell 脚本是解释型脚本语言,核心用途是批量执行命令、自动化任务、系统管理
它不是单一语言,而是命令解释器(bash、zsh、dash)的脚本集合。


2.1 Shell 脚本结构

#!/bin/bash
# 这是一个示例脚本
echo "Hello, World!"
  • Shebang(#!):指定脚本解释器(如 /bin/bash/bin/sh
  • 注释# 开头
  • 命令:系统命令、Shell 内置命令、用户自定义函数

2.2 脚本执行方式

方式 1:直接用解释器运行
bash script.sh
sh script.sh
  • 优点:不依赖脚本可执行权限
  • 缺点:必须显式指定解释器
方式 2:赋予可执行权限并运行
chmod +x script.sh
./script.sh
  • 解释器由 shebang 决定
  • 如果 shebang 是 /bin/bash,会用 Bash 执行
  • 注意:当前目录必须加 ./,否则 shell 不会从当前路径找
方式 3:source 执行(或 . 命令)
source script.sh
. script.sh
  • 在当前 shell 环境执行,不会启动新进程
  • 常用于加载环境变量或函数
  • 区别:直接运行脚本是子进程执行,source 是当前进程执行

2.3 常见执行差异总结

方式是否新进程是否受可执行权限影响解释器选择
bash script.sh命令指定
./script.shShebang 指定
source script.sh当前 shell

3. Shell 编程实用技巧

  1. 参数与位置变量
echo "第一个参数:$1"
echo "参数总数:$#"
  1. 判断条件
if [ -f "/etc/passwd" ]; then
    echo "文件存在"
fi
  1. 循环
for file in *.txt; do
    echo "$file"
done
  1. 函数
myfunc() {
    echo "Hello $1"
}
myfunc "World"

4. 学习 Shell 的大纲建议

  1. Shell 基础语法

    • 注释、变量、运算符、转义字符
  2. 流程控制

    • if、case、for、while、until
  3. 函数与作用域

    • 定义、调用、局部变量
  4. 输入输出与管道

    • stdin/stdout/stderr 重定向
  5. 字符串与数组处理

  6. 正则表达式与 grep/sed/awk

  7. 脚本参数与环境变量

  8. 调试与错误处理

    • set -xtrap
  9. 自动化任务

    • cron、systemd timer
  10. 与系统交互

    • 文件操作、进程管理、网络请求

全面解析 Shell:从历史渊源到高级技巧

Shell 是 Linux/Unix 世界里的“灵魂中介”,它既是命令行解释器,也是脚本语言,更是自动化的生产力工具。
你每天输入的每一条命令,几乎都要经过 Shell 的手。


1. 什么是 Shell

Shell 在英文里是“壳”的意思,形象地说,它是用户与内核之间的一层保护壳:

  • 用户:只会发出命令(用人类能看懂的方式)
  • Shell:把命令翻译成内核能理解的系统调用
  • 内核:直接操作硬件,完成任务

在计算机体系结构中,Shell 主要是:

  • 命令行解释器(Command-Line Interpreter)
  • 脚本语言运行环境(Scripting Language Environment)

如果把 Linux 比作餐厅:

  • 内核:厨师,真正做菜
  • 用户:客人
  • Shell:服务员,负责点单并送到后厨,还能帮你定套餐(脚本)

2. Shell 的发展与种类

Shell 不是单一的东西,它有很多“方言”,主要有:

  • sh(Bourne Shell)
    Unix 早期标准 Shell,几乎所有系统都有,脚本可移植性高。
  • bash(Bourne Again Shell)
    Linux 默认 Shell(GNU 项目产物),功能强大,支持命令补全、历史记录等。
  • zsh(Z Shell)
    交互体验优秀,可定制性强,搭配 oh-my-zsh 是程序员网红配置。
  • ksh(Korn Shell)
    企业级 Unix 常用 Shell,语法和功能介于 sh 与 bash 之间。
  • fish(Friendly Interactive Shell)
    现代交互式 Shell,语法简洁,自动建议功能很强。

3. Shell 的两大角色

3.1 交互式解释器

当你在终端输入一行命令:

ls -l /etc

Shell 会:

  1. 解析命令(词法/语法分析)
  2. 查找命令路径(PATH 环境变量)
  3. 创建子进程执行命令
  4. 等待命令执行结束并返回结果

3.2 脚本运行环境

Shell 脚本就是把命令按顺序写到文件里:

#!/bin/bash
echo "Backup start..."
tar czf backup.tar.gz /home/user
echo "Backup done."

运行时,Shell 会逐行解释执行这些命令,支持变量、条件判断、循环等控制逻辑。


4. Shell 脚本的核心要素

4.1 Shebang(#!)

告诉系统用哪个解释器执行:

#!/bin/bash

如果是:

#!/bin/sh

则使用系统默认的 Bourne Shell(在 Linux 上可能是 dash)。


4.2 变量

name="Tom"
echo "Hello, $name"
  • 赋值时等号两边不能有空格
  • 引用变量时 $name${name}
  • Shell 中变量类型都是字符串,需要时用 let$(( )) 做数值运算

4.3 条件判断

if [ -f "/etc/passwd" ]; then
    echo "文件存在"
else
    echo "文件不存在"
fi
  • -f 检查是否为文件
  • -d 检查是否为目录
  • -e 检查文件是否存在

4.4 循环

for file in *.txt; do
    echo "$file"
done
while read line; do
    echo "$line"
done < file.txt

4.5 函数

greet() {
    echo "Hello, $1"
}
greet "World"
  • $1 表示第一个参数,$# 表示参数个数

5. Shell 脚本的执行方式

执行方式命令示例是否新进程可执行权限要求
直接用解释器bash script.sh
赋可执行权限运行chmod +x script.sh && ./script.sh
source 执行source script.sh

区别source 在当前 Shell 环境执行,不会新建子进程,适合加载环境变量。


6. Shell 的优势与劣势

优势:

  • 跨平台(几乎所有 Unix/Linux 系统都支持)
  • 轻量、无需编译、快速开发
  • 与系统命令无缝集成

劣势:

  • 执行速度不如编译语言
  • 调试能力有限
  • 语法在不同 Shell 之间可能有差异

7. 高级玩法

  • 命令替换
today=$(date +%Y-%m-%d)
echo "Today is $today"
  • 管道与重定向
cat file.txt | grep "keyword" > result.txt
  • 数组
arr=("one" "two" "three")
echo ${arr[1]}  # 输出 two
  • 信号处理
trap 'echo "Script interrupted"; exit' SIGINT

8. 学习路线建议

  1. 熟悉常用 Linux 命令
  2. 学会基本脚本结构(变量、条件、循环)
  3. 掌握输入输出重定向与管道
  4. 熟练用正则、grep、sed、awk 处理文本
  5. 学会调试(set -xtrap
  6. 编写自动化任务脚本(配合 cron)
  7. 尝试写函数库和可复用脚本
  8. 探索 Bash/Zsh 的高级特性

9. 小结

Shell 是 Linux 运维、自动化、批处理的核心技能。
掌握它,不仅能节省大量重复劳动时间,还能让你与系统交互的效率提升数倍。
对很多资深工程师来说,Shell 甚至是运维自动化的第一语言


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值