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

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路径内的整洁,不要乱拷贝东西进去
  • 也可以创建软链,这里不做赘述

相关文章:

Linux: Shell编程入门

Shell 编程入门 1 ) Shell 概念 shell 是 在英语中 壳, 外壳的意思可以把它想象成嵌入在linux这样的操作系统里面的一个微型的编程语言不像C语言, C 或 Java 等编程语言那么完整&#xff0c;它可以帮我们完成很多自动化任务例如保存数据监测系统的负载等等&#xff0c;我们同样…...

python爬虫实战案例——抓取B站视频,不同清晰度抓取,实现音视频合并,超详细!(内含完整代码)

文章目录 1、任务目标2、网页分析3、代码编写 1、任务目标 目标网站&#xff1a;B站视频&#xff08;https://www.bilibili.com/video/BV1se41117WP/?vd_sourcee8e376ccbc5aa4cfd88e6a7917adfd1a&#xff09;&#xff0c;用于本文测验 要求&#xff1a;抓取该网址下的视频&…...

容灾与云计算概念

​​​​​​基础知识容灾备份——备份技术系统架构与备份网络方案-CSDN博客 SAN&#xff0c;是storage area network的简称&#xff0c;翻译过来就是存储区域网络。 顾名思义&#xff0c;SAN首先是一个网络&#xff0c;其次它是关于存储的&#xff0c;区域则是指服务器和存储资…...

基于 Python 的自然语言处理系列(44):Summarization(文本摘要)

在这一部分中&#xff0c;我们将探讨如何使用 Transformer 模型将长文档压缩为摘要&#xff0c;这个任务被称为文本摘要。文本摘要是 NLP 领域中最具挑战性的任务之一&#xff0c;因为它需要理解长篇文本并生成连贯的总结&#xff0c;捕捉文档中的核心主题。然而&#xff0c;当…...

RabbitMQ安装部署

安装Erlang 由于RabbitMQ是用Erlang语言编写的&#xff0c;所以在安装RabbitMQ之前需要安装Erlang 安装依赖 [rootpro-ex ~]yum install make gcc gcc-c build-essential openssl openssl-devel unixODBC unixODBC-devel kernel-devel m4 ncurses-devel设置Eralng的存储库 […...

智联招聘×Milvus:向量召回技术提升招聘匹配效率

01. 业务背景 在智联招聘平台&#xff0c;求职者和招聘者之间的高效匹配至关重要。招聘者可以发布职位寻找合适的人才&#xff0c;求职者则通过上传简历寻找合适的工作。在这种复杂的场景中&#xff0c;我们的核心目标是为双方提供精准的匹配结果。在搜索推荐场景下&#xff0c…...

unplugin-auto-import 库作用

unplugin-auto-import是一个 Vite、Webpack 和 Rollup 的插件。 一、自动导入模块 1. 减少手动导入 在 JavaScript 和 TypeScript 项目中&#xff0c;它可以自动检测并导入常用的模块和函数&#xff0c;无需手动在每个文件中进行导入操作。这大大减少了代码中的重复性导入语…...

【Multisim14.0正弦波>方波>三角波】2022-6-8

缘由有没有人会做啊Multisim14.0-其他-CSDN问答参考方波、三角波、正弦波信号产生 - 豆丁网...

vue3纯前端验证码示例

前言 验证码的用途&#xff1a;通过要求用户输入一串难以被机器自动识别的字符或图像&#xff0c;有效阻止恶意用户或脚本通过暴力破解方式尝试登录账户。验证码的分类&#xff1a;常见的验证码有短信、文本、图形等&#xff0c;安全度越高&#xff0c;依赖的插件或服务也越多…...

招聘程序员

全栈总监❤️golang❤️UI设计师 ☀️前端☀️Nodejs工☀️平面设计☀️PHP工 ☀️安卓❤️Flutter❤️运维☀️爬虫 公司福利&#xff1a; ☃️ 带薪年假、年终奖、13k-18k薪 &#x1f3e9; 内宿 2人/间或外宿可补助 &#x1f4b5; 转正绩效 ✨节日礼金&#xff1a;生日礼金…...

Android 判断手机放置的方向

#1024程序员节&#xff5c;征文# 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 需求 老板&#xff1a;我有个手持终端&#xff0c;不能让他倒了&#xff0c;当他倒或者倾斜的时候要发出报警&#xff1b; 程序猿&#xff1a;我这..... 老板…...

Telegram机器人的手机部署

目的 一直有读 epub 电子书的习惯&#xff0c;摘录段落复制下来段落很难看&#xff0c;把自己写的排版器的逻辑复制下来&#xff0c;写成了一个排版机器人所有发给机器人的文字&#xff0c;都会经过排版&#xff0c;后转发到读书频道 前提 本来最好方法是直接把机器人架在服…...

ffmpeg视频滤镜: 色温- colortemperature

滤镜简述 colortemperature 官网链接 》 FFmpeg Filters Documentation 这个滤镜可以调节图片的色温&#xff0c;色温值越大显得越冷&#xff0c;可以参考一下下图&#xff1a; 咱们装修的时候可能会用到&#xff0c;比如选择灯还有地板的颜色的时候&#xff0c;选暖色调还是…...

Django+Vue全栈开发项目入门(二)

Vue是一款用于构建用户界面的JavaScript渐进式框架&#xff0c;它基于标准HTML、CSS和JavaScript构建&#xff0c;并提供了一套声明式的、响应式的、组件化的编程模型&#xff0c;有助于高效地开发用户界面。 环境准备 安装Node.js&#xff1a;Vue项目的构建和运行依赖于Node…...

【ubuntu改源】

ubuntu改源 备份原始源查看ubuntu发行版本arm64 noble版本的源vim修改源更新系统软件源 备份原始源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.disabled查看ubuntu发行版本 lsb_release -aarm64 noble版本的源 清华源 vim修改源 esc :1,$d # 删除所有# 默认注…...

SQLI LABS | Less-9 GET-Blind-Time based-Single Quotes

关注这个靶场的其它相关笔记&#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 输入下面的链接进入靶场&#xff08;如果你的地址和我不一样&#xff0c;按照你本地的环境来&#xff09;&#xff1a; http://localhost/sqli-labs/Less-9/ 靶场提示 …...

【小白学机器学习24】 用例子来比较:无偏估计和有偏估计

目录 1 关于无偏估计 1.1 无偏估计的定义 2 原始数据 2.1 假设我们是上帝&#xff0c;我们能创造一个总体/母体 population 2.2 按尽量随机取样的原则去取1个随机样本 sample1 3 一个关于无偏估计的理解 3.1 接着上面的总体和样本 sample1 3.2 左边的计算&#xff0c;期…...

C++在实际项目中的应用第二节:C++与网络编程

第五章&#xff1a;C在实际项目中的应用 第二节&#xff1a;C与网络编程 1. TCP/IP协议详解与C实现 TCP/IP&#xff08;传输控制协议/互联网协议&#xff09;是现代互联网通信的基础协议。理解 TCP/IP 协议对于开发网络应用至关重要。本节将详细介绍 TCP/IP 协议的工作原理以…...

依赖关系是危险的

依赖, 我们需要它们&#xff0c;但如何有效安全地使用它们&#xff1f;在本周的节目中&#xff0c;Kris 与 Ian 和 Johnny 一起讨论了 polyfill.io 供应链攻击、Go 中依赖管理和使用的历史&#xff0c;以及 Go 谚语“一点复制胜过一点依赖”。当然&#xff0c;我们用一些不受欢…...

ipguard与Ping32如何加密数据防止泄露?让企业信息更安全

在信息化时代&#xff0c;数据安全已成为企业运营的重中之重。数据泄露不仅会导致经济损失&#xff0c;还可能损害企业声誉。因此&#xff0c;选择合适的数据加密工具是保护企业敏感信息的关键。本文将对IPGuard与Ping32这两款加密软件进行探讨&#xff0c;了解它们如何有效加密…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...