LInux—shell编程

[复制链接]
发表于 2025-5-23 21:25:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一、Shell 编程核心特性


  • 解释型语言

    • 无需编译,直接由 bash、sh 等解释器逐行实行。
    • 类似 PHP 的解释实行,差别于 C 的编译型。

  • 系统命令集成

    • 可直接调用 Linux 命令(如 ls、grep、awk),实现系统管理自动化。
    • 与 C/PHP 的库函数调用逻辑差别。

  • 面向文本处置处罚

    • 擅长处置处罚文件、管道(|)、输入输出重定向(>、>>、<)。

  • 轻量级脚本

    • 适合快速编写小型工具,语法简洁,但复杂逻辑不如 C/PHP 灵活。


二、Shell 底子语法详解

1. 变量



  • 定义与赋值(无需声明范例,等号两侧无空格):
    1. name="Alice"       # 字符串
    2. count=10           # 数值
    3. files=$(ls)        # 命令替换(结果存入变量)
    复制代码
  • 利用变量($ 符号引用):
    1. echo $name         # 输出变量值
    2. echo "$name"       # 推荐用双引号避免空格问题
    3. echo "${name}_01"  # 明确变量边界
    复制代码
  • 作用域:默认全局,函数内用 local 声明局部变量。
  • 对比
    1. PHP:$name = "Alice";,类型自动推导。
    2. C:需声明类型(char name[] = "Alice";)。
    复制代码
2. 输入与输出



  • 输出
    1. echo "Hello, $name!"          # 自动换行
    2. printf "Count: %d\n" $count   # 格式化输出(类似 C 的 printf)
    复制代码
  • 输入
    1. read -p "Enter your name: " name   # 读取用户输入到变量
    复制代码
  • 对比
    1. C:scanf("%s", name);
    2. PHP:$name = fgets(STDIN);
    复制代码
3. 条件判定



  • 语法
    1. if [ $a -eq $b ]; then
    2.     echo "a equals b"
    3. elif [ $a -gt $b ]; then
    4.     echo "a > b"
    5. else
    6.     echo "a < b"
    7. fi
    复制代码
  • 判定条件
    1. 数值比较:-eq(等于)、-ne(不等于)、-gt(大于)。
    2. 字符串比较:=(相等)、!=(不等)。
    3. 文件检查:-f(文件存在)、-d(目录存在)。
    复制代码
  • 对比
    1. C/PHP:使用 ==、> 等运算符,条件写在 () 内。
    2. Shell 的 [ ] 等同于 test 命令,需严格空格。
    复制代码
4. 循环



  • for 循环
    1. for i in {1..5}; do
    2.     echo "Number: $i"
    3. done
    4. for file in *.txt; do
    5.     echo "Processing $file"
    6. done
    复制代码
  • while 循环
    1. count=1
    2. while [ $count -le 5 ]; do
    3.     echo "Count: $count"
    4.     ((count++))       # 算术运算需用双括号
    5. done
    复制代码
  • 对比
    1. PHP:for ($i=1; $i<=5; $i++) { ... }
    2. C:for (int i=1; i<=5; i++) { ... }
    复制代码
5. 函数



  • 定义与调用
    1. function greet() {
    2.     local name=$1      # 局部变量
    3.     echo "Hello, $name!"
    4. }
    5. greet "Bob"            # 调用函数并传参
    复制代码
  • 参数通报
    1. 通过位置参数 $1、$2 访问,$# 表示参数个数。
    2. 返回值:通过 return 返回整数状态码(0 表示成功),或 echo 返回字符串。
    复制代码
  • 对比
    1. C/PHP:函数需明确参数列表和类型,返回类型固定。
    复制代码

三、Shell 特有功能

1. 特殊变量

  1. $0:脚本名称。
  2. $1、$2...:脚本参数。
  3. $?:上一条命令的退出状态。
  4. $$:当前进程 PID。
复制代码
2. 通配符与扩展

  1. *:匹配任意字符。
  2. ?:匹配单个字符。
  3. {a,b,c}:生成组合(如 file{1..3}.txt)。
复制代码
3. 管道与重定向

  1. ls -l | grep ".txt"       # 管道传递输出
  2. echo "Hello" > output.txt # 覆盖写入文件
  3. echo "World" >> output.txt # 追加写入
复制代码

四、与 C/PHP 的关键差异

特性ShellCPHP实行方式解释实行编译为二进制解释实行(Web 环境)变量范例无需声明,均为字符串需显式声明范例(int, char 等)动态范例(自动推导)语法布局依赖空格和缩进严格利用分号和大括号类似 C,分号和大括号函数返回值返回状态码(0-255)返回任意范例值返回任意范例值调试难度简单(直接运行)需编译后调试(gdb)直接运行,集成错误日志日志适用场景系统管理、自动化脚本系统级开辟、高性能应用Web 开辟、后端逻辑
五、快速入门学习建议


  • 底子练习

    • 编写脚本输出系统信息(如时间、用户)。
    • 利用循环批量重命名文件。

  • 调试本领

    • 添加 set -x 在运行时显示具体实行过程。
    • 利用 echo 打印变量值。

  • 避坑指南

    • 空格敏感:[ $a == $b ] 中的空格必须保留。
    • 引号利用:变量含空格时需用双引号包裹(如 "$files")。
    • 权限题目:脚本需添加实行权限(chmod +x script.sh)。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表