LInux—shell编程
一、Shell 编程核心特性
-
解释型语言
-
无需编译,直接由
bash
、sh
等解释器逐行执行。 -
类似 PHP 的解释执行,不同于 C 的编译型。
-
-
系统命令集成
-
可直接调用 Linux 命令(如
ls
、grep
、awk
),实现系统管理自动化。 -
与 C/PHP 的库函数调用逻辑不同。
-
-
面向文本处理
-
擅长处理文件、管道(
|
)、输入输出重定向(>
、>>
、<
)。
-
-
轻量级脚本
-
适合快速编写小型工具,语法简洁,但复杂逻辑不如 C/PHP 灵活。
-
二、Shell 基础语法详解
1. 变量
-
定义与赋值(无需声明类型,等号两侧无空格):
name="Alice" # 字符串 count=10 # 数值 files=$(ls) # 命令替换(结果存入变量)
-
使用变量(
$
符号引用):echo $name # 输出变量值 echo "$name" # 推荐用双引号避免空格问题 echo "${name}_01" # 明确变量边界
-
作用域:默认全局,函数内用
local
声明局部变量。 -
对比:
PHP:$name = "Alice";,类型自动推导。C:需声明类型(char name[] = "Alice";)。
2. 输入与输出
-
输出:
echo "Hello, $name!" # 自动换行 printf "Count: %d\n" $count # 格式化输出(类似 C 的 printf)
-
输入:
read -p "Enter your name: " name # 读取用户输入到变量
-
对比:
C:scanf("%s", name);PHP:$name = fgets(STDIN);
3. 条件判断
-
语法:
if [ $a -eq $b ]; thenecho "a equals b" elif [ $a -gt $b ]; thenecho "a > b" elseecho "a < b" fi
-
判断条件:
数值比较:-eq(等于)、-ne(不等于)、-gt(大于)。字符串比较:=(相等)、!=(不等)。文件检查:-f(文件存在)、-d(目录存在)。
-
对比:
C/PHP:使用 ==、> 等运算符,条件写在 () 内。Shell 的 [ ] 等同于 test 命令,需严格空格。
4. 循环
-
for 循环:
for i in {1..5}; doecho "Number: $i" donefor file in *.txt; doecho "Processing $file" done
-
while 循环:
count=1 while [ $count -le 5 ]; doecho "Count: $count"((count++)) # 算术运算需用双括号 done
-
对比:
PHP:for ($i=1; $i<=5; $i++) { ... }C:for (int i=1; i<=5; i++) { ... }
5. 函数
-
定义与调用:
function greet() {local name=$1 # 局部变量echo "Hello, $name!" }greet "Bob" # 调用函数并传参
-
参数传递:
通过位置参数 $1、$2 访问,$# 表示参数个数。返回值:通过 return 返回整数状态码(0 表示成功),或 echo 返回字符串。
-
对比:
C/PHP:函数需明确参数列表和类型,返回类型固定。
三、Shell 特有功能
1. 特殊变量
$0:脚本名称。$1、$2...:脚本参数。$?:上一条命令的退出状态。$$:当前进程 PID。
2. 通配符与扩展
*:匹配任意字符。?:匹配单个字符。{a,b,c}:生成组合(如 file{1..3}.txt)。
3. 管道与重定向
ls -l | grep ".txt" # 管道传递输出
echo "Hello" > output.txt # 覆盖写入文件
echo "World" >> output.txt # 追加写入
四、与 C/PHP 的关键差异
特性 | Shell | C | PHP |
---|---|---|---|
执行方式 | 解释执行 | 编译为二进制 | 解释执行(Web 环境) |
变量类型 | 无需声明,均为字符串 | 需显式声明类型(int, char 等) | 动态类型(自动推导) |
语法结构 | 依赖空格和缩进 | 严格使用分号和大括号 | 类似 C,分号和大括号 |
函数返回值 | 返回状态码(0-255) | 返回任意类型值 | 返回任意类型值 |
调试难度 | 简单(直接运行) | 需编译后调试(gdb) | 直接运行,集成错误日志 |
适用场景 | 系统管理、自动化脚本 | 系统级开发、高性能应用 | Web 开发、后端逻辑 |
五、快速入门学习建议
-
基础练习:
-
编写脚本输出系统信息(如时间、用户)。
-
使用循环批量重命名文件。
-
-
调试技巧:
-
添加
set -x
在运行时显示详细执行过程。 -
使用
echo
打印变量值。
-
-
避坑指南:
-
空格敏感:
[ $a == $b ]
中的空格必须保留。 -
引号使用:变量含空格时需用双引号包裹(如
"$files"
)。 -
权限问题:脚本需添加执行权限(
chmod +x script.sh
)。
-