Linux: Shell编程入门

Shell 编程入门


1 ) Shell 概念

  • shell 是 在英语中 壳, 外壳的意思
  • 可以把它想象成嵌入在linux这样的操作系统里面的一个微型的编程语言
  • 不像C语言, C++ 或 Java 等编程语言那么完整,它可以帮我们完成很多自动化任务
  • 例如保存数据监测系统的负载等等,我们同样可以用C语言完成类似的任务
  • Shell 相比C语言的优势在于它是完全嵌入在linux中的,不需要安装,不需要编译
  • 而且我们不需要学习太多新的东西
  • 我们在linux中用的那些命令,都可以用在shell语言中,如:ls, cd, grep

2 ) Shell 脚本

  • 脚本,script 是批处理文件的延伸,是一种纯文本保存的程序
  • 计算机的脚本程序是确定的一系列控制计算机进行运算操作动作的组合
  • 在其中可以实现一定的逻辑分支

3 )Shell的分类

  • 我们把 linux中的两个不同的环境分开来看:终端命令行环境,图形界面环境
  • 在大多数的时候,我们使用的是图形界面,桌面版
  • 在终端命令行当中,可以实现很多在图形界面中不能完成的复杂任务
  • linux有不少图形界面环境,例如 GNOME, KDE, XFCE等
  • 但是终端命令行环境貌似长得都一样,但也有好多种,对应的就是不同的Shell
  • 不同的终端命令行之间的区别不像图形界面那么明显
  • 因为终端命令行一般都是黑底白字, 颜色一般可配置,根据Shell的不同,命令行所能提供的功能也不同
  • 因此我们可以把不同的终端命令行环境称为不同的shell了,下面进行分类

3.1 Sh

  • Bourne Shell 的缩写,可以说是目前所有Shell的祖先

3.2 Bash

  • Bash: Bourne Again Shell 的缩写
  • 比 Sh 多了一个 Again, 英文: 又, 再
  • 它是 Sh的进阶版本,比Sh更优秀
  • 它也是目前大多数linux发行版以及苹果的macos操作系统的默认的shell

3.3 Ksh

  • Ksh: Korn Shell 的缩写
  • 一般在收费的 Unix 版本上比较多见,但也有免费版本的

3.4 Csh

  • Csh 是 C Shell 的缩写
  • 这个shell, 它的语法有点类似c语言

3.5 Tcsh

  • Tcsh 是 Tenex C Shell 的缩写
  • Csh 的优化版本

3.6 Zsh

  • Zsh: Z Shell 的缩写
  • 比较新的一个Shell, 集 Bash, Ksh, Tcsh 各家之大成
  • Github 上又一个 Zsh 的轻松配置程序叫做 oh-my-zsh

各个 Shell 的演化关系

  • 首先Sh是最古老的,然后它演化出来Csh, Bash, Ksh,然后Csh又演化出Tcsh
  • Zsh 是集 Bash, Ksh, Tcsh 之各家大成,但实际上, Sh 始终比 Bash 的使用面更广
  • linux 是模仿 unix 而创建的,几乎所有源自于unix的操作系统,包括linux都是有Sh的
  • 但不是每一个系统都有Bash

Shell 的作用

  • shell 是管理命令行的程序,其实Shell这个程序在等待你输入那些命令
  • shell 帮助记住在终端中输入的命令:键盘 ↑ ↓ 键可以回退追踪之前输入的命令
  • 用组合键 Ctrl + R 在终端的历史记录中搜索执行过的命令
  • 用Tab键自动补全输入过的命令,比如输入 ca 再按两次TAB就会提示所有ca开头的命令
  • 用Tab键也可自动补全路径
  • 也可以控制进程,把进程放入后台或暂停,如:CTRL + C, CTRL + Z
  • 还可以重定向命令,用到 <, >, |, 等符号
  • 还可以定义别名,例如:ll 可以被定义为 ls -al 的别名
  • 简而言之,shell 提供的所有可以让你去运行命令的基础功能
  • 用下图来简单的表示用户share操作系统内核和硬件的一个关系
  • Shell 就像用户和操作系统之间的一个中介或桥梁一样
  • 这也是它的名字Shell的由来,很像去包裹操作系统内核的一个外壳
  • Shell 本来在英语当中就是外壳的意思,Shell 就有点像鸡蛋的外壳一样
  • 里面就有点像蛋白和蛋黄,我们可以把 Shell 比作一个蛋壳
  • 这个内核是蛋白,然后这个硬件就是蛋黄, 整体就是像一颗鸡蛋
  • .bashrc 这个文件其实就是 bash 的一个配置文件
  • 每个linux用户都可以定义自己的 .bashrc 来配置 bash 这个Shell
  • 它可以指定bash的命令提示符样式定义别名等等
  • 在使用linux的过程中,我们经常会碰到一些以rc结尾的文件:.bashrc, .zshrc, .init.rc, .vimrc 等
  • 一般以rc结尾的, 多为配置文件里面包含了软件运行前会去读取并运行的这些初始化的命令

安装一个新的Shell

  • 一般,你的linux系统当中大概只安装了以下的几种Shell: sh, csh, bash
  • 如果你想要安装另一个Shell,比如 KSH 可以这样安装: $ sudo yum install ksh
  • zsh 也是一样的安装 $ sudo yum install zsh
  • 安装好后,要进行切换才能生效,比如执行:$ ksh 或 $ zsh
  • 或者使用专门切换shell 的命令 : $ chsh 它是 Change Shell 的缩写
    • 如果当前是 /bin/bash, 你要替换成ksh,要输入 /bin/ksh
    • 回车即可保存
  • 为什么切换Shell至关重要呢?
    • 因为你的 shell 脚本需要依赖于某一个 shell
    • 简单来说,你使用不同的shell,语法其实是不一样的
  • 我们可以选择 sh 的一个脚本, 基本可以运行在大多数系统上,但是Sh的这个语法却并不好用
  • 我们选择使用bash, 更容易编写,更常用

编写一个Shell脚本

1 )创建脚本文件 vim test.sh

  • 注意 sh 就是 shell 的缩写,是一种shell约定俗成的命令惯例

2 )指定脚本要使用的 Shell

  • 在写一个 Shell 脚本时,第一要做的事情就是指定要使用哪种Shell 来解析/运行它
  • 因为各种Shell语法不尽相同
    #!/bin/bash
    
  • 这里, #! 被称为 Sha-bang, 或 Shebang
  • 这里被指定用 bash 执行

3 )运行命令

  • 原则很简单:只需要写入你想要执行的命令
    #!/bin/bash
    ls
    
  • 这里这个脚本会列出当前所有文件

4 )注释

  • 注释不会被执行,但是用于解释我们的脚本做了什么
  • Shell 脚本注释以 # 开头
    #!/bin/bash
    # 列出运行的文件
    ls
    

5 )运行Shell脚本

  • 保存上述文件,$ :x
  • 给脚本添加可执行权限 $ chmod +x test.sh
  • 运行脚本 $ ./test.sh

6 ) 以调试模式运行

  • 调试一个脚本程序 $ bash -x test.sh
  • 参数 -x 表示以调试模式运行
  • Shell 就会把我们的脚本文件运行时的细节打印出来了

7 )创建属于自己的命令

  • 我们自己的命令和内置的一些命令,如:pwd, ls 等不同的是
  • 内置命令在PATH环境中,可以被识别
  • PATH变量包含了你系统内所有可被直接执行的程序的路径
  • 打印出 PATH 变量:$ echo $PATH
  • 如果 test.sh 在PATH中的某一个路径中,直接执行 test.sh 即可执行,不用在特定的目录下
  • 但是,注意,我们尽可能要保持PATH路径内的整洁,不要乱拷贝东西进去
  • 也可以创建软链,这里不做赘述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/901049.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数学之三角函数

小时候总是听别人讲甚么三角函数&#xff0c;感觉十分高大上&#xff0c;像是很深奥的知识。 今天我来讲解一下三角函数&#xff0c;首先就是概念了。 三角函数的概念&#xff08;初中&#xff09;&#xff08;入门难度&#xff09; 三角函数顾名思义就属于函数。那么它和三角…

51单片机快速入门之 AD(模数) DA(数模) 转换 2024/10/25

51单片机快速入门之 AD(模数) DA(数模) 转换 2024/10/25 声明:本文图片来源于网络 A模拟信号特点: 电压或者电流 缓慢上升 随着时间连续缓慢上升或下降 D数字信号特点:电压或者电流 保持一段时间的高/低电平 状态 / 突变 (高电压瞬间低电压) 数字电路中 通常将0-1v电压称…

JavaScript高级特性速成指南:原型链、严格模式、高阶函数、闭包、递归、浅拷贝和深拷贝

如果生活中有什么使你感到快乐&#xff0c;那就去做吧&#xff0c;不要管别人说什么 文章目录 原型链严格模式高阶函数闭包递归浅拷贝和深拷贝 原型链 概念&#xff1a;就是串联起来的结构作用&#xff1a;提供一个成员的查找机制或者查找规则 Javascript的成员查找机制(规则)…

resources下lib文件中的jar包怎么添加到git

这里讲怎么处理这部分的问题&#xff1a; 1&#xff1a;java maven resource 目录下的jar无法被添加到git 2&#xff1a;使用git命令添加jar包时报错&#xff1a;The following paths are ignored by one of your .gitignore files: ***&#xff0c;use -if **** 上面都是相同…

SpringMVC实战:构建高效表述层框架

文章目录 1. SpringMVC简介和体验1.1 介绍1.2 主要作用1.3 核心组件和调用流程1.4 快速体验 2. SpringMVC接收数据2.1 访问路径设置2.2 接收参数2.2.1 param和json参数比较2.2.2 param参数接收2.2.3 路径参数接收2.2.4 json参数接收 2.3 接收cookie数据2.4 接收请求头数据2.5 原…

Spring Boot技术中小企业设备管理系统设计与实践

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

SpringBoot启动报错java.nio.charset.MalformedInputException: Input length =1

启动springboot项目时&#xff0c;出现了以下报错&#xff1a; defaultPattern_IS_UNDEFINEDdefaultPattern_IS_UNDEFINEDdefaultPattern_IS_UNDEFINEDjava.lang.IllegalStateException: Failed to load property source from location classpath:/application-local.yamlat o…

行业首发|美格智能创新推出5G+Wi-Fi 7智能终端解决方案,端侧AI助力数智升维

在数字化时代的生产生活过程中&#xff0c;特殊场景下的通信需求愈发重要。高速、灵活、稳定的通信保障能够进一步提升生产生活的效率。随着5G网络的高速发展&#xff0c;一方面&#xff0c;其凭借低时延、高带宽、高可靠性和大规模连接的特性让移动终端的网络连接实现跨越式升…

【Sublime Text】设置中文 最新最详细

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Sublime Text】设置中文 最新最详细 开…

【Git】将本地代码提交到github仓库

一、创建仓库 复制这里的HTTP连接码 二、仓库初始化 进入你要提交的代码文件夹 右键选择 Git Bach Here 输入命令 git clone [HTTP连接码] 此时文件夹里会出现一个新的文件夹&#xff0c;将原来的文件当今这个新的文件夹 三、上传代码 执行命令 cd [新文件夹] 将所有文件放…

蓝牙技术的多种模式详解

蓝牙作为一种广泛应用的无线通信技术&#xff0c;已经在我们的日常生活中无处不在。随着技术的发展&#xff0c;蓝牙已经不再仅限于传统的音频传输&#xff0c;而是扩展到了各种应用领域。本文将深入探讨蓝牙的各种模式及其应用场景。 1. 经典蓝牙&#xff08;BR/EDR&#xff…

重生之“我打数据结构,真的假的?”--3.栈和队列(无习题)

栈和队列 C语言中的栈和队列总结 在C语言中&#xff0c;**栈&#xff08;Stack&#xff09;和队列&#xff08;Queue&#xff09;**是两种非常重要的数据结构。它们广泛用于各种应用中&#xff0c;比如内存管理、任务调度、表达式求值等。本文将对这两种数据结构进行详细的介…

从零开始的Go语言之旅(2 Go by Example: Values)

Go 语言有多种值类型&#xff0c;包括字符串、整数、浮点数、布尔值等。以下是一些基本示例。 package mainimport "fmt"func main() {fmt.Println("go" "lang")fmt.Println("11 ", 11)fmt.Println("7.0/3.0 ", 7.0/3.0)f…

深度学习——线性神经网络(五、图像分类数据集——Fashion-MNIST数据集)

目录 5.1 读取数据集5.2 读取小批量5.3 整合所有组件 MNIST数据集是图像分类中广泛使用的数据集之一&#xff0c;但是作为基准数据集过于简单&#xff0c;在本小节将使用类似但更复杂的Fashion-MNIST数据集。 import torch import torchvision from torch.utils import data fr…

你了解的spring框架有哪些

列举一些重要的Spring模块&#xff1f; Spring Core&#xff1a; 基础,可以说 Spring 其他所有的功能都需要依赖于该类库。主要提供 IOC 依赖注入功能。**Spring Aspects ** &#xff1a; 该模块为与AspectJ的集成提供支持。Spring AOP &#xff1a;提供了面向方面的编程实现。…

logback 如何将日志输出到文件

如何作 将日志输出到文件需要使用 RollingFileAppender&#xff0c;该 Appender 必须定义 rollingPolicy &#xff0c;另外 rollingPollicy 下必须定义 fileNamePattern 和 encoder <appender name"fileAppender" class"ch.qos.logback.core.rolling.Rollin…

重构案例:将纯HTML/JS项目迁移到Webpack

我们已经了解了许多关于 Webpack 的知识&#xff0c;但要完全熟练掌握它并非易事。一个很好的学习方法是通过实际项目练习。当我们对 Webpack 的配置有了足够的理解后&#xff0c;就可以尝试重构一些项目。本次我选择了一个纯HTML/JS的PC项目进行重构&#xff0c;项目位于 GitH…

Elliott Wave Prophet,艾略特波浪预测指标!预测未来走势!免费公式!(指标教程)

指标名称&#xff1a;艾略特波浪预测 Elliott Wave Prophet 版本&#xff1a;MT4 ver. 2.0 Elliott Wave Prophet &#xff0c;艾略特波浪预测指标是一款创新的外汇指标&#xff0c;旨在帮助进行波浪分析&#xff0c;并基于已形成的波浪来一定程度上预测未来的价格走势。Elli…

【设计模式-状态模式】

状态模式&#xff08;State Pattern&#xff09;是一种行为设计模式&#xff0c;它允许一个对象在内部状态改变时改变它的行为。换句话说&#xff0c;这种模式让对象在不同的状态下能够表现出不同的行为&#xff0c;而不需要修改对象的代码。状态模式通过将对象的行为与状态进行…

江协科技STM32学习- P21 ADC模数转换器

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…