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 - 回车即可保存
- 如果当前是 /bin/bash, 你要替换成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 等编程语言那么完整,它可以帮我们完成很多自动化任务例如保存数据监测系统的负载等等,我们同样…...
python爬虫实战案例——抓取B站视频,不同清晰度抓取,实现音视频合并,超详细!(内含完整代码)
文章目录 1、任务目标2、网页分析3、代码编写 1、任务目标 目标网站:B站视频(https://www.bilibili.com/video/BV1se41117WP/?vd_sourcee8e376ccbc5aa4cfd88e6a7917adfd1a),用于本文测验 要求:抓取该网址下的视频&…...
容灾与云计算概念
基础知识容灾备份——备份技术系统架构与备份网络方案-CSDN博客 SAN,是storage area network的简称,翻译过来就是存储区域网络。 顾名思义,SAN首先是一个网络,其次它是关于存储的,区域则是指服务器和存储资…...
基于 Python 的自然语言处理系列(44):Summarization(文本摘要)
在这一部分中,我们将探讨如何使用 Transformer 模型将长文档压缩为摘要,这个任务被称为文本摘要。文本摘要是 NLP 领域中最具挑战性的任务之一,因为它需要理解长篇文本并生成连贯的总结,捕捉文档中的核心主题。然而,当…...
RabbitMQ安装部署
安装Erlang 由于RabbitMQ是用Erlang语言编写的,所以在安装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. 业务背景 在智联招聘平台,求职者和招聘者之间的高效匹配至关重要。招聘者可以发布职位寻找合适的人才,求职者则通过上传简历寻找合适的工作。在这种复杂的场景中,我们的核心目标是为双方提供精准的匹配结果。在搜索推荐场景下,…...
unplugin-auto-import 库作用
unplugin-auto-import是一个 Vite、Webpack 和 Rollup 的插件。 一、自动导入模块 1. 减少手动导入 在 JavaScript 和 TypeScript 项目中,它可以自动检测并导入常用的模块和函数,无需手动在每个文件中进行导入操作。这大大减少了代码中的重复性导入语…...
【Multisim14.0正弦波>方波>三角波】2022-6-8
缘由有没有人会做啊Multisim14.0-其他-CSDN问答参考方波、三角波、正弦波信号产生 - 豆丁网...
vue3纯前端验证码示例
前言 验证码的用途:通过要求用户输入一串难以被机器自动识别的字符或图像,有效阻止恶意用户或脚本通过暴力破解方式尝试登录账户。验证码的分类:常见的验证码有短信、文本、图形等,安全度越高,依赖的插件或服务也越多…...
招聘程序员
全栈总监❤️golang❤️UI设计师 ☀️前端☀️Nodejs工☀️平面设计☀️PHP工 ☀️安卓❤️Flutter❤️运维☀️爬虫 公司福利: ☃️ 带薪年假、年终奖、13k-18k薪 🏩 内宿 2人/间或外宿可补助 💵 转正绩效 ✨节日礼金:生日礼金…...
Android 判断手机放置的方向
#1024程序员节|征文# 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 需求 老板:我有个手持终端,不能让他倒了,当他倒或者倾斜的时候要发出报警; 程序猿:我这..... 老板…...
Telegram机器人的手机部署
目的 一直有读 epub 电子书的习惯,摘录段落复制下来段落很难看,把自己写的排版器的逻辑复制下来,写成了一个排版机器人所有发给机器人的文字,都会经过排版,后转发到读书频道 前提 本来最好方法是直接把机器人架在服…...
ffmpeg视频滤镜: 色温- colortemperature
滤镜简述 colortemperature 官网链接 》 FFmpeg Filters Documentation 这个滤镜可以调节图片的色温,色温值越大显得越冷,可以参考一下下图: 咱们装修的时候可能会用到,比如选择灯还有地板的颜色的时候,选暖色调还是…...
Django+Vue全栈开发项目入门(二)
Vue是一款用于构建用户界面的JavaScript渐进式框架,它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、响应式的、组件化的编程模型,有助于高效地开发用户界面。 环境准备 安装Node.js: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
关注这个靶场的其它相关笔记:SQLI LABS —— 靶场笔记合集-CSDN博客 0x01:过关流程 输入下面的链接进入靶场(如果你的地址和我不一样,按照你本地的环境来): http://localhost/sqli-labs/Less-9/ 靶场提示 …...
【小白学机器学习24】 用例子来比较:无偏估计和有偏估计
目录 1 关于无偏估计 1.1 无偏估计的定义 2 原始数据 2.1 假设我们是上帝,我们能创造一个总体/母体 population 2.2 按尽量随机取样的原则去取1个随机样本 sample1 3 一个关于无偏估计的理解 3.1 接着上面的总体和样本 sample1 3.2 左边的计算,期…...
C++在实际项目中的应用第二节:C++与网络编程
第五章:C在实际项目中的应用 第二节:C与网络编程 1. TCP/IP协议详解与C实现 TCP/IP(传输控制协议/互联网协议)是现代互联网通信的基础协议。理解 TCP/IP 协议对于开发网络应用至关重要。本节将详细介绍 TCP/IP 协议的工作原理以…...
依赖关系是危险的
依赖, 我们需要它们,但如何有效安全地使用它们?在本周的节目中,Kris 与 Ian 和 Johnny 一起讨论了 polyfill.io 供应链攻击、Go 中依赖管理和使用的历史,以及 Go 谚语“一点复制胜过一点依赖”。当然,我们用一些不受欢…...
ipguard与Ping32如何加密数据防止泄露?让企业信息更安全
在信息化时代,数据安全已成为企业运营的重中之重。数据泄露不仅会导致经济损失,还可能损害企业声誉。因此,选择合适的数据加密工具是保护企业敏感信息的关键。本文将对IPGuard与Ping32这两款加密软件进行探讨,了解它们如何有效加密…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
