当前位置: 首页 > article >正文

LInux—shell编程

一、Shell 编程核心特性

  1. 解释型语言

    • 无需编译,直接由 bashsh 等解释器逐行执行。

    • 类似 PHP 的解释执行,不同于 C 的编译型。

  2. 系统命令集成

    • 可直接调用 Linux 命令(如 lsgrepawk),实现系统管理自动化。

    • 与 C/PHP 的库函数调用逻辑不同。

  3. 面向文本处理

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

  4. 轻量级脚本

    • 适合快速编写小型工具,语法简洁,但复杂逻辑不如 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 的关键差异

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

五、快速入门学习建议

  1. 基础练习

    • 编写脚本输出系统信息(如时间、用户)。

    • 使用循环批量重命名文件。

  2. 调试技巧

    • 添加 set -x 在运行时显示详细执行过程。

    • 使用 echo 打印变量值。

  3. 避坑指南

    • 空格敏感[ $a == $b ] 中的空格必须保留。

    • 引号使用:变量含空格时需用双引号包裹(如 "$files")。

    • 权限问题:脚本需添加执行权限(chmod +x script.sh)。

相关文章:

LInux—shell编程

一、Shell 编程核心特性 解释型语言 无需编译&#xff0c;直接由 bash、sh 等解释器逐行执行。 类似 PHP 的解释执行&#xff0c;不同于 C 的编译型。 系统命令集成 可直接调用 Linux 命令&#xff08;如 ls、grep、awk&#xff09;&#xff0c;实现系统管理自动化。 与 C/…...

尚硅谷redis7 37-39 redis持久化之AOF简介

37 redis持久化之AOF简介 AOF 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工…...

GitLab 备份所有仓库(自动克隆)

一、准备工作 1. 环境要求 已安装 Git&#xff08;版本 2.10&#xff09;本地磁盘空间充足&#xff08;根据仓库总大小预估&#xff09;已配置 SSH 密钥到 GitLab&#xff08;推荐方式&#xff09; 2. 获取 GitLab API 访问权限 登录 GitLab&#xff0c;点击右上角头像 → …...

[浏览器]缓存策略机制详解

在做页面性能优化的时候&#xff0c;有一个点容易被忽略&#xff0c;那就是资源缓存优化。 浏览器里缓存策略分为强缓存&#xff0c;协商缓存以及不缓存&#xff0c;每个缓存策略都有其适用的优化场景。 下面为大家详解何为强缓存&#xff0c;协商缓存 先说结论强缓>协商&g…...

Vue修饰符全解析

目录 一、事件修饰符 二、按键修饰符 三、系统修饰键 四、表单修饰符 五、鼠标修饰符 六、特殊修饰符 七、自定义修饰符 使用建议 一、事件修饰符 <!-- 阻止冒泡 --> <button click.stop"handleClick">点击测试</button><!-- 阻止默认行…...

OpenCV CUDA 模块图像过滤-----创建一个计算图像导数的滤波器函数createDerivFilter()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::createDerivFilter 是 OpenCV CUDA 模块中的一个工厂函数&#xff0c;用于创建一个计算图像导数的滤波器。这个滤波器可以用来计算图像…...

计算机视觉与深度学习 | Python实现CEEMDAN-ABC-VMD-DBO-CNN-LSTM时间序列预测(完整源码和数据)

以下是一个结合CEEMDAN、ABC优化VMD、DBO优化CNN-LSTM的完整时间序列预测实现方案。该方案包含完整的数据生成、算法实现和模型构建代码。 完整实现代码 import numpy as np import pandas as pd from PyEMD import CEEMDAN from vmdpy import VMD from sklearn.preprocessing…...

AWS関連職種向け:日本語面接QA集

1. 自己紹介&#xff08;じこしょうかい&#xff09; Q&#xff1a;簡単に自己紹介をお願いします。 A&#xff1a; はい、〇〇と申します。これまで約4年間、主にAWSを基盤としたインフラ設計・構築・運用に従事してまいりました。VPCやEC2、RDS、S3などの基本サービスの設計…...

【Macos】安装前端环境rust+node环境

Macos 安装前端环境 1、findar 新建目录 projects 2、安装brew 使用中科大镜像, 手动配置path 3、brew install git 4、 git clone githttp://10.10.9.201/software/dreame_sorting_app.git 5、安装vscode/hbuilderx/node 6、rustup切换镜像并安装https://rsproxy.cn/#getStart…...

(01)华为GaussDB((基于PostgreSQL))高斯数据库使用记录,dbeaver客户端配置高斯驱动,连接高斯数据库

高斯数据库是华为推出的一款基于PostgreSQL的企业级数据库产品&#xff0c;客户端使用通用的dbeaver dbeaver客户端配置高斯驱动 建议使用 dbeaver24.3.1及以上客户端&#xff0c;选择模式后执行sql会绑定模式名&#xff0c;如果使用dbeaver23.2版本&#xff0c;选择模式后执…...

ARM Linux远程调试

准备 虚拟机既能ping通开发板,又能ping通外网,还要能ping通Windows主机(如果你有上位机通信(tftp、vsftp、ssh)的需求) VMware 添加网络适配器2用作桥接网卡,原有的网络适配器保持为NAT模式 打开虚拟网络编辑器,配置VMnet0为桥接模式,外部连接设置为Realtek PCIe G…...

day24Node-node的Web框架Express

1. Express 基础 1.1 什么是Express node的web框架有Express 和 Koa。常用Express 。 Express 是一个基于 Node.js 的快速、极简的 Web 应用框架,用于构建 服务器端应用(如网站后端、RESTful API 等)。它是 Node.js 生态中最流行的框架之一,以轻量、灵活和易用著称。 …...

Webpack和Vite构建工具有什么区别?各自的优缺点是什么

Webpack 和 Vite 是两种主流的前端构建工具,分别代表了不同的设计理念和技术路线。以下是它们的核心区别和优缺点对比: 一、核心区别 维度WebpackVite设计理念基于打包(Bundle-Based)基于原生 ESM(Native ESM)开发模式全量打包后启动按需编译 + 浏览器直接加载 ESM构建工…...

让MySQL更快:EXPLAIN语句详尽解析

前言 在数据库性能调优中&#xff0c;SQL 查询的执行效率是影响系统整体性能的关键因素之一。MySQL 提供了强大的工具——EXPLAIN 语句&#xff0c;帮助开发者和数据库管理员深入分析查询的执行计划&#xff0c;从而发现潜在的性能瓶颈并进行针对性优化。 EXPLAIN 语句能够模…...

基于谷歌浏览器的Web Crypto API生成一对2048位的RSA密钥(公钥+私钥),并以JSON格式(JWK)打印到浏览器控制台

用Google Chrome 浏览器的Web Crypto API生成RSA密钥对&#xff1a;在浏览器环境中生成一对2048位的RSA密钥(公钥私钥)&#xff0c;然后以JSON格式(JWK)将它们打印到控制台&#xff0c;方便开发者查看和使用。 // 控制台生成密钥对 (async () > {// 调用Web Crypto API生成…...

[CSS3]rem移动适配

前言 什么是移动端适配? 让页面的元素在屏幕尺寸变化时, 同比放大或缩小 移动适配的方案 rem&#xff1a;目前多数企业在用的解决方案 vw/vh&#xff1a;未来的解决方案 rem 体验rem适配 目标: 能够使用rem单位设置网页元素的尺寸 网页效果: 屏幕宽度不同&#xff0c;网…...

向量数据库及ChromaDB的使用

什么是向量数据库&#xff1f; 向量数据库&#xff08;Vector Database&#xff09;&#xff0c;也叫矢量数据库&#xff0c;主要用来存储和处理向量数据。 在数学中&#xff0c;向量是有大小和方向的量&#xff0c;可以使用带箭头的线段表示&#xff0c;箭头指向即为向量的方…...

CodeBuddy实现pdf批量加密

本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 前言 在信息爆炸的时代&#xff0c;PDF 格式因其跨平台性和格式稳定性&#xff0c;成为办公、学术、商业等领域传递信息的重要载体。从机密合同到个人隐私文档&#xff0c…...

编程中优秀大模型推荐:特点与应用场景深度分析

编程中优秀大模型推荐&#xff1a;特点与应用场景深度分析 编程中优秀大模型推荐&#xff1a;特点与应用场景深度分析GPT系列模型模型概述技术特点编程应用场景 DeepSeek系列模型模型概述技术特点编程应用场景 Claude系列模型模型概述技术特点编程应用场景 Llama系列模型模型概…...

orm详解--查询执行

深入解析 Django ORM 查询执行阶段 的核心机制&#xff0c;包括查询集的惰性特性、表达式树构建、SQL 编译过程及优化原理。以下是详细分析&#xff1a; 一、查询集&#xff08;QuerySet&#xff09;的惰性执行机制 1. 惰性特性的底层实现 核心类&#xff1a;django.db.mode…...

运行打印Hello World启动了多少线程?

序言 看网上说阿里二面问到了一个看似最简单且没有标准答案的一个问题&#xff0c;所有学习编程都是从打印hello World开始的&#xff0c;那运行打印启动了多少个线程&#xff1f; 启动了多少线程&#xff1f; 在运行一个简单的 “Hello World” 程序时&#xff0c;启动的线…...

C++项目中调用C#DLL的的方式

C项目中调用C&#xff03;DLL的的方式 方法一&#xff1a;使用COM技术方法二&#xff1a;使用C/CLI方法三&#xff1a;使用P/Invoke&#xff08;适用于C#导出非托管接口&#xff09; 在C中调用C#编写的DLL&#xff0c;通常需要借助COM&#xff08;Component Object Model&#…...

咳嗽止咳药笔记250526 , 磷酸苯丙哌林 , 喷托维林 , 右美沙芬

咳嗽止咳药笔记250526 止咳药的种类较多&#xff0c;根据作用机制可分为中枢性止咳药、外周性止咳药、祛痰药、抗组胺药及中成药等。以下是具体分类及效果分析&#xff1a; 一、中枢性止咳药 可待因 效果&#xff1a;直接抑制延髓咳嗽中枢&#xff0c;镇咳作用强且迅速&#x…...

vue pinia 独立维护,仓库统一导出

它允许您跨组件/页面共享状态 持久化 安装依赖pnpm i pinia-plugin-persistedstate 将插件添加到 pinia 实例上 pinia独立维护 统一导出 import { createPinia } from pinia import piniaPluginPersistedstate from pinia-plugin-persistedstateconst pinia creat…...

网络的协议和标准

网络的协议和标准 OSI参考模型 应用层 报文 网关 表示层 报文 会话层 报文 传输层 报文 网络层 数据包 路由器 数据链路层 帧 网桥交换机 物理层 位 中继器 集线器 TCP/IP协议簇 逻辑地址&#xff1a;每台设备都有一个ip地址 一个ip地址包包含网络号 子网络号 主机号可…...

十六进制字符转十进制算法

十六进制与十进制对照 十六进制十进制00112233445566778899A10B11C12D13E14F15 十六进制与十进制区别 十六进制是满16进1&#xff0c;十进制是满10进1&#xff0c;这里要注意下区别&#xff0c;16进制的字符里面为什么是0-9没有10&#xff0c;这里面进了一位&#xff0c;表示…...

跟Gemini学做PPT:汇报背景图寻找指南

PPT 汇报背景图寻找指南 既然前端功能已经完善&#xff0c;现在可以专注于汇报了。对于 PPT 背景图&#xff0c;你有几个选择&#xff1a; 1. 内置模板和主题&#xff1a; 优点&#xff1a; 最简单、快速&#xff0c;PowerPoint、Keynote、Google Slides 等演示软件都内置了…...

java交易所,多语言,外汇,黄金,区块链,dapp类型的,支持授权,划转,挖矿(源码下载)

目前这套主要是运营交易所类型的&#xff0c;授权的会贵点&#xff0c;编译后的是可以直接跑的&#xff0c;图片也修复了&#xff0c;后门也扫了 都是在跑的项目支持测&#xff0c;全开源 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/90887047 更多…...

(已开源-CVPR2024) RadarDistill---NuScenes数据集Radar检测第一名

本文介绍一篇Radar 3D目标检测模型&#xff1a;RadarDistill。雷达数据固有的噪声和稀疏性给3D目标检测带来了巨大挑战。在本文中&#xff0c;作者提出了一种新的知识蒸馏(KD)方法RadarDistill&#xff0c;它可以通过利用激光雷达数据来提高雷达数据的表征。RadarDistill利用三…...

【MySQL】 数据库基础数据类型

一、数据库简介 1.什么是数据库 数据库&#xff08;Database&#xff09;是一种用于存储、管理和检索数据的系统化集合。它允许用户以结构化的方式存储大量数据&#xff0c;并通过高效的方式访问和操作这些数据。数据库通常由数据库管理系统&#xff08;DBMS&#xff09;管理&…...