「速通Shell」初次走近Shell,Shell是什么?

简介: 对于开发者来说,除了掌握Java、C/C++等主要编程语言外,还需要掌握支撑性的工具语言和库,学习和掌握Shell,能够帮助我们高效便捷的编译和运行程序,让系统代替复杂的人工操作。

对于开发者来说,除了掌握Java、C/C++等主要编程语言外,还需要掌握支撑性的工具语言和库,学习和掌握Shell,能够帮助我们高效便捷的编译和运行程序,让系统代替复杂的人工操作。通过速通Shell系列,我们一起走近Shell,读懂Shell,用好Shell,提高程序执行效率和日常工作效率。

初次走进Shell

要想走进Shell的世界,我们需要先观其貌,识其才,进而攻其心,得其人,所谓知己知彼,无往不利。我们从Shell的概念、原理、分类和优点开始。

Shell是什么

Shell 是一种脚本语言,一种命令语言,也是一种程序设计语言。脚本语言最显著的特点是解释执行而非编译执行,一个Shell脚本主要由原本需要在命令行输入的命令组成,Shell可以控制进程和文件,以及启动和控制其它程序。Shell 通过提示输入,向操作系统解释该输入,然后处理来自操作系统的结果输出,管理用户与操作系统之间的交互。

Shell工作原理

计算机设备是由一个个物理硬件组成的,本身不具备运行处理能力,需要通过内核和驱动对硬件进行操作,驱动其工作。在计算机系统中,内核接口是隐藏起来的,用户不能直接操作内核,我们需要通过一个中间程序,接收用户操作命令,将其传递给内核,推动内核工作,进而推动硬件工作。Shell便是这个中间程序,起到连接操作系统内核和用户的作用。

所以Shell起到一个代理商的作用,通俗点说,有点像一个代购。一般情况下,我们难以直接获得海外商品,可以将需求提给代购。代购理解消化需求后,去海外供应商采购商品,供应商就是内核。供应商收到采购指令,将商品返回给代购,代购将商品可视化的呈现给用户。

Shell分类

随着历史发展和技术演进,Shell诞生了数个版本,它们彼此借鉴学习,推陈出新,使得Shell更容易被用户接受和使用,极大释放了生产力。主要Shell版本如下:

  • Bourne Shell

    标识为sh,由Steve Bourne在贝尔实验室开发,在UNIX系统中被普遍使用,在编程方面比较优秀,但在用户交互方面没有其他Shell优秀。

  • Bourne-Again Shell

    标识为bash,该Shell是linux操作系统上使用最为广泛的Shell,也是现在的主流Shell,在Bourne Shell基础上增强了很多特性,如命令补全,命令历史表等。

  • Korn Shell

    标识为ksh,二十世纪八十年代早期由David Korn在贝尔实验室编写开发。它完全向上兼容Bourne Shell并包含了C Shell的很多特性,集成了C Shell和Bourne Shell优点。

  • C Shell

    标识为csh,C Shell开发于二十世纪七十年代末,作为编程语言使用时,语法类似于C,更容易被接受。此外,C Shell还提供了增强交互使用的功能,如作业控制、命令行历史和别名等。但是类C的特点使其降低了作为脚本语言的灵活性,因此C Shell对于个人用户而言运行比较慢。

现如今,在我们日常系统中,bash已经成为Shell编程的不二人选,因此速通Shell系列也是全部采用bash版本。

Shell的优势

没有金刚钻就揽不了瓷器活,Shell能够在软件系统中有着举足轻重的作用,自然有着它的天然优势,简单、易用、高效是其三大基本原则。

  • 语法简单

    Shell看似复杂,实际上语法和结构是比编译执行的编程语言要简单,主要内容是命令调用、语句拼接、文件读写等,逻辑复杂度一般不会非常高;

  • 使用方便

    Shell将一系列操作复杂的命令存储在一个或几个脚本文件内,只需要一次调用就可以顺序执行完所有命令;

  • 适用范围广

    Shell是解释执行,灵活性高,适用场景多,例如代码编译、版本打包发布、软件安装、程序运行、log存储、进程监控等一系列操作繁琐、重复性高的工作,均可以依靠Shell来高效准确完成。

第一个Shell脚本

Hello World

按照惯例,我们编写一个最基本的Shell脚本hello.sh:

#!/bin/bash
echo "hello world"

代码只有两行,但也值得进行一下分析。

脚本文件第一行使用#!符号指定一个脚本的解释器,如#!/bin/bash、#!/bin/sh等,该行被#注释,所以不会被当作命令来执行,但计算机通过该注释信息得知应该使用什么解释器来解释整个脚本文件中的所有有效代码,在上面的例子中使用的解释器是/bin/bash。

脚本文件第二行echo 命令用于向窗口输出文本,hello word被双引号括起来,表示是一个字符串。

Shell脚本文件以sh作为扩展名,sh代表Shell。脚本写完,下面看一下脚本怎么运行。

Shell执行方式

Shell是解释型语言,常用执行方法有四种:绝对路径执行、相对路径执行、脚本命令执行、系统命令执行。

绝对路径执行

刚创建出来的脚本文件是没有可执行权限的,因此绝对路径执行时需要先给脚本文件赋予可执行权限,使用命令chmod +x hello.sh即可。执行完毕,打印hello world。

在这里插入图片描述

相对路径执行

相对路径就是通过./来执行脚本文件,操作最为方便。

在这里插入图片描述

脚本命令执行

通过sh或者bash命令来执行脚本,不需要为脚本文件分配可执行条件。该方式下,脚本默认解释器类型为运行命令所指定,不受脚本文件开头的#!/bin/bash、#!/bin/sh所控制。

在这里插入图片描述

系统命令执行

通过source命令来执行脚本,在执行时hello.sh作为了参数source命令的参数,因此也不需要hello.sh有执行权限。

在这里插入图片描述

总结

在项目开发中,脚本是工具性语言,受到的关注不如C/C++、Java等语言高,但它是操作系统和软件项目运行的推进器和管理员,尤其是在运维上起到了关键作用。掌握Shell编程,实现软件自动化,大大提升了我们的工作效率,提高了系统的运行效率。

一支战队是否优秀,C位非常重要,辅助也要出彩,相辅相成。

下一篇我们将进入shell编程非常关键的变量。

相关文章
|
消息中间件 Cloud Native 应用服务中间件
阿里云云原生工程师认证(Alibaba Cloud Certified Associate,ACA)考试大纲
介绍阿里云云原生工程师认证(Alibaba Cloud Certified Associate,ACA)所需具备的知识及学习方法等。
2198 1
|
7月前
|
SQL 安全 API
【SpringSecurity新手村系列】(7)基于资源权限码(Authority)的接口权限控制实战
本章完成从“用户-角色-权限资源”数据模型到 `@PreAuthorize` 方法级拦截的完整闭环。和上一章“角色控制(Role)”不同,本章重点是 **资源权限码(Authority)**,即 `clue:list`、`clue:edit` 这类细粒度权限。你将得到一套能直接用于企业项目的权限控制方案,同时规避 `Controller 未注册`、`Mapper SQL 字段写错`、`权限码字段映射错位` 等高频坑位。
489 4
|
9月前
|
人工智能 JSON JavaScript
Agent + Skills 架构的Vue应用开发智能体深度解析
VTJ.PRO 的 AI 助手是面向低代码开发的多模态智能副驾驶,深度融合自然语言处理、计算机视觉与自动代码生成。支持文本提示、设计图(Figma/MasterGo)及 JSON 元数据输入,可自动生成 Vue 组件、解析布局、绑定数据,并通过工具调用直接操作页面。具备流式响应、多轮对话、增量更新与错误自修复能力,显著提升可视化开发效率。(239字)
665 1
Agent + Skills 架构的Vue应用开发智能体深度解析
|
关系型数据库 Java MySQL
《理解MySQL数据库》InnoDB事务深度解析
本文深入解析InnoDB事务机制,涵盖ACID特性、隔离级别、MVCC、锁机制及Spring事务管理,结合SQL与Java代码示例,系统阐述事务原理与最佳实践,助力构建高性能、高可靠数据库应用。
|
NoSQL Java 关系型数据库
【Redis系列笔记】分布式锁
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路
1861 2
|
SQL 人工智能 数据可视化
StarRocks MCP Server 开源发布:为 AI 应用提供强大分析中枢
StarRocks MCP Server 提供通用接口,使大模型如 Claude、OpenAI 等能标准化访问 StarRocks 数据库。开发者无需开发专属插件或复杂接口,模型可直接执行 SQL 查询并探索数据库内容。其基于 MCP(Model Context Protocol)协议,包含工具、资源和提示词三类核心能力,支持实时数据分析、自动化报表生成及复杂查询优化等场景,极大简化数据问答与智能分析应用构建。项目地址:https://github.com/StarRocks/mcp-server-starrocks。
1128 14
|
人工智能 机器人 Linux
开源的基于RTOnBoot多核异构框架打造的低成本高性能Linux主控加Ethercat主站解决方案,同步周期可稳定达到125微秒
开源的基于RTOnBoot多核异构框架打造的低成本高性能Linux主控加Ethercat主站解决方案,同步周期可稳定达到125微秒
|
编译器 C# 开发者
C# 9.0 新特性解析
C# 9.0 是微软在2020年11月随.NET 5.0发布的重大更新,带来了一系列新特性和改进,如记录类型、初始化器增强、顶级语句、模式匹配增强、目标类型的新表达式、属性模式和空值处理操作符等,旨在提升开发效率和代码可读性。本文将详细介绍这些新特性,并提供代码示例和常见问题解答。
532 7
C# 9.0 新特性解析
|
机器学习/深度学习 人工智能 安全
并非只有AI-2025年工作技能报告
全球最大的在线学习平台Coursera发布《2025年工作技能报告》,报告基于500万企业学习者和7,000多家机构的数据分析,揭示了2025年全球劳动力所需的关键技能趋势。报告强调,随着GenAI的快速发展,相关技能的课程注册量同比增长了866%,显示出对AI能力的需求激增。
1630 9
|
SQL JSON JavaScript
什么是JSON PATH?
**JSON Path 概述** JSON Path 是一种查询JSON对象的语言,类似于XML的XPath。在JavaScript或PostgreSQL中,它简化了深层属性的访问。在PG中,传统的链式引用操作符如`->`可能繁琐,而JSON Path通过字符串路径表达式提供更简洁的访问方式。例如,`$.track.segments[0].HR`来获取心率数据。SQL/JSON Path Language允许通过`jsonb_path_query`等函数执行路径查询,支持通配符、条件检查和参数化路径。
599 2

热门文章

最新文章