讲师中心 微信公众号
AI工具推荐 视频效率加速

完全掌握Linux系统的Shell编程

云晨君_6428

云晨君_6428

发布时间:2022-01-18 17:09:45

|

3581人浏览过

|

来源于CSDN

转载

本篇文章给大家带来了linux系统中shell编程的相关知识,在学习shell编程之前,我们应该要先知道什么是shell,还有什么是shell脚本,希望对大家有帮助。

完全掌握Linux系统的Shell编程

一. 什么是Shell

        1. 在学习Shell编程之前,我们应该要先知道什么是Shell

        用户、Shell、Linux内核、硬件的关系如下图:

        Shell是一个应用程序,也可以说是一个命令解释器,它是用户和Linux内核之间的桥梁,可以将用户在图形界面上的操作或在终端输入的命令传递给Linux内核,然后Linux内核再调度各个硬件及其他资源来完成用户的操作。

        什么是Linux的内核?在Linux操作系统中,真正能够操作计算机硬件完成某个用户功能的那一部分被称为Linux系统的内核。用户在使用Linux系统时,是不可以直接操作内核的,而是通过Shell来间接的操作内核的。Shell不属于内核的一部分,而是在Linux内核之外开发的应用程序,它将接收到的用户鼠标点击操作或输入的命令传递给内核,而内核再去调度硬件去完成指定的操作。这样用户就不需要直接操作内核,而是通过Shell间接地操作内核,内核也不会被直接的暴露于外部,保障了内核的安全性,也简化了用户的操作。

        Shell这个应用程序是开机即启动的,我们在操作Linux系统时,无时不刻都在直接或者间接地通过Shell去操作Linux内核。其实,在没有图形化界面之前,用户是通过终端或者控制台直接地去调用Shell这个应用程序,然后通过输入命令来操作Linux系统的。用户在控制台或者终端上看到的 $ 和 # 其实就是Shell的命令提示符,这表明用户已经进入了Shell这个程序,只需要输入命令,即可通过Shell来操作Linux内核。只不过root用户登录显示$,而普通用户登录显示#。

        另外,Shell在将用户的操作传递给内核的过程,就是在调用内核提供的API接口的过程。比如,用户在图形界面或者终端命令行做了一个打开文件的操作,而这个用户的操作Shell接收到后,就会去调用内核提供的相应的函数,然后内核再去调度硬件资源来完成用户的操作。

        2. 常见的Shell

        我们知道,Linux 是一个开源的操作系统,它是由世界各地的多个组织机构或个人共同开发完成的,每个组织机构或个人负责一部分功能,最后组合在一起,就构成了现在我们使用的 Linux。也正是这个原因,这些不同的组织机构或者个人都会开发出可以在Linux系统中使用的应用程序,而这些应用程序的功能可能是类似的,各有优缺点,至于使用哪一个由用户选择。而Shell就是这样的一个应用程序,所以Shell有很多个版本,目前Linux的大多数发行版默认使用的Shell是 bash shell。其他常见的Shell版本如下:

        (1) sh:sh 的全称是 Bourne shell,是 UNIX 上的标准 shell,很多 UNIX 版本都配有 sh。sh 是第一个流行的 Shell。

        (2) csh:这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。

        (3) tcsh:tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。

        (4) ash:一个轻量级占用资源少的 Shell,适合运行于低内存环境,与 bash shell 完全兼容。

        (5) bash:bash shell 由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。

        3. 查看Linux系统的Shell

       在Linux系统中,一般默认使用的Shell是bash shell。Shell是一个应用程序,一般都是放在/bin或者/user/bin目录下,而当前 Linux 系统可用的 Shell 都记录在/etc/shells文件中。

(1) 查看系统当前可用的Shell,执行命令【cat -n /etc/shells】:

(2) 查看系统当前默认使用的shell,执行命令【echo $SHELL】:

 

(3) 查看各个用户使用的Shell,执行命令【cat -n /etc/passwd】:

二. 什么是Shell编程

        1. 什么是Shell编程语言

        我们已经知道,Shell是一个应用程序,而这个应用程序不单单只是可以将用户的操作命令传递给Linux内核,它也支持编程。Shell都会对应一套编程语言的语法,而这套语言就被称为Shell编程语言或是Shell脚本语言。Shell编程语言和JavaScript语言一样是一种脚本语言,它不需要编译,而它的解释器就是Shell应用程序本身。

        我们平时工作中所说的Shell,大多数情况指的是Shell脚本语言,而不是Shell应用程序。

        2. 什么是Shell脚本 

        我们在使用Shell脚本语言时,可以和Linux系统的其他操作命令结合使用(如 ls、grep等等),而我们使用Shell脚本语言和其他命令结合编写能够完成某个特定功能的扩展名为.sh的文本,就叫做Shell脚本程序。

        3. 第一个Shell脚本

        我们已经知道,Shell有很多个版本,而每个版本支持的Shell脚本语言语法可能是有差异的,而下面的关于Shell脚本的所有例子都是针对于Bash Shell这个版本而言。

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载

(1)在根目录下新建一个Hello.sh脚本:【vim Hello.sh】

(2)然后输入以下内容:

#!/bin/bash     
echo "Hello World "

        第一行:#! 是一个约定标记,它可以告诉系统这个脚本要使用哪个Shell版本作为解释器,后面紧跟的/bin/bash则是Shell的所在路径,所以【#!/bin/bash 】表示声明使用bin目录下的 bash shell 作为这个脚本的解释器;

        第二行:【echo "Hello World "】表示输出文本 Hello World !;

(3)然后保存退出:【!wq】;

(4)这样,一个能够输出 Hello World !的脚本就编写完成。

补充说明:

       上面我们已经说过,Shell程序就是Shell脚本语言的解释器,而我们在使用终端时(例如通过Xshell连接Linux服务器的终端),其实就是已经进入了Shell这个程序,所以其实我们是可以在终端直接输入Shell编程语言的代码来运行的,而不需要写在脚本里再去运行。例如,声明一个变量并打印这个变量的值:

        (1)输入代码:【name=张三】,表示定义了一个变量name,它的值为张三;

        (2)输入代码:【echo $name】,表示打印变量name的值。

        当然,这种方式只适合去执行逻辑简单只有一两句代码的情况,大多数情况下我们还是将Shell编程代码写在.sh脚本中再去执行。

         4. 运行Shell脚本的方式

        上面我们已经编写了一个能够输出 Hello World !的Shell脚本运行,而现在我们就要执行 Hello.sh 这个脚本。而Shell脚本的执行方式有两种:

         第一种:给予.sh文本可执行权限,然后执行文本:

        (1)先给予Shell脚本可执行权限:【chmod +x Hello.sh】;

        (2)直接执行:绝对路径:【/Hello.sh】 或者   相对路径:【./Hello.sh】

                注意,这里执行时如果使用的是相对路径,必须要以./开头,表示当前目录,否则系统会找不到脚本,从而导致执行失败。

         第二种:将 Shell 脚本作为参数传递给 Bash Shell 解释器:

        (1)这里使用Bash Shell来作为解释器,那么我们直接调用Bash Shell 这个程序,然后把Hello.sh这个脚本作为参数传给Shell即可:【/bin/bash Hello.sh】或 【bash Hello.sh】

        (2)这里需要注意,使用这种方式执行Shell脚本时,在Shell脚本的第一行中就不需要声明使用哪个版本的Shell来作为解释器,也就是不需要这行代码【#!/bin/bash】,因为我们运行脚本的命令中【/bin/bash Hello.sh】,就已经指明了使用哪个版本的Shell作为解释器。

                注意,这种方式执行脚本文件时,如果使用的是相对路径,那么【/bin/bash ./Hello.sh】和【/bin/bash Hello.sh】是一样的,并无使用第一种执行方式中的区别。

相关推荐:《Linux视频教程》

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

相关专题

更多
Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

40

2026.10.28

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

20

2026.10.28

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

0

2026.10.28

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

120

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

80

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

60

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

40

2026.10.22

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

60

2026.10.22

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

40

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn