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这两款加密软件进行探讨,了解它们如何有效加密…...
gitlab 的备份与回复
一、gitlab备份 1.确定备份目录 gitlab 默认的备份目录为/var/opt/gitlab/backups,可通过配置gitlab.rb配置文件进行修改,如: [rootlocalhost ~]# vim /etc/gitlab/gitlab.rb #若要修改备份文件的存储目录话,打开下面选项的注释…...
创建型模式-----建造者模式
目录 背景: 构建模式UML 代码示例 房子成品: 构建器抽象: 具体构建器: 建筑师: 测试部…...
威胁 Windows 和 Linux 系统的新型跨平台勒索软件:Cicada3301
近年来,网络犯罪世界出现了新的、日益复杂的威胁,能够影响广泛的目标。 这一领域最令人担忧的新功能之一是Cicada3301勒索软件,最近由几位网络安全专家进行了分析。他们有机会采访了这一危险威胁背后的勒索软件团伙的成员。 Cicada3301的崛…...
Go 语言基础教程:7.Switch 语句
在这篇教程中,我们将学习 Go 语言中的 switch 语句,它是条件分支的重要结构。我们将通过一个示例程序逐步解析 switch 的不同用法。 package mainimport ("fmt""time" )func main() {i : 2fmt.Print("Write ", i, " …...
mysql原理、部署mysql主从+读写分离、监控mysql主从脚本
mysql:工作原理 从库生成两个线程,一个I/O线程,一个SQL线程; i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中; 主库会生成一个 log dump 线程&…...
模型选择拟合
1.通过多项式拟合交互探索概念 import math import numpy as np import torch from torch import nn from d2l import torch as d2l 2.使用三阶多项式来生成训练和测试数据的标签 max_degree 20 # 多项式的最大阶数 n_train, n_test 100, 100 # 训练和测试数据集大小 true…...
文案语音图片视频管理分析系统-视频矩阵
文案语音图片视频管理分析系统-视频矩阵 1.产品介绍 产品介绍方案 产品名称: 智驭视频矩阵深度分析系统(SmartVMatrix) 主要功能: 深度学习驱动的视频内容分析多源视频整合与智能分类高效视频检索与编辑实时视频监控与异常预警…...
ArcGIS计算落入面图层中的线的长度或面的面积
本文介绍在ArcMap软件中,计算落入某个指定矢量面图层中的另一个线图层的长度、面图层的面积等指标的方法。 如下图所示,现在有2个矢量要素集,其中一个为面要素,表示某些区域;另一个为线要素,表示道路路网。…...
ctfshow-web入门-web172
//拼接sql语句查找指定ID用户 $sql "select username,password from ctfshow_user2 where username !flag and id ".$_GET[id]." limit 1;"; 联合查询 该题目与上一个题目不是同一个类型,该题目需要进行sql联合查询。 第一步:确…...
Keep健身TV版 3.3.0 | 针对智能电视的健身塑形软件
Keep健身TV版是专为智能电视设计的功能强大的健身塑形软件。该软件根据用户的不同需求提供多种器械和阶段健身目标组合编排,为用户提供科学、规范、专业的实时指导。即便是在家没有健身器械的情况下,也能跟随教练的语音指导一步步完成训练。软件涵盖从有…...
二级网站怎么建/如何优化网络延迟
康托展开和康托展开的逆运算 相当于排列的hash 记住对于每一位,求比较小且没出现过的数有多少个,数的个数乘上阶乘就好了 #include<bits/stdc.h> #define REP(i, a, b) for(register int i (a); i < (b); i) #define _for(i, a, b) for(regis…...
宁夏电力建设工程公司外部网站/青岛seo排名收费
[ 中关村在线 原创 ] 有很多的朋友们在问我:“交换机和路由器到底有什么区别”,其实这个不是什么很难理解的事情,这两个设备的区别主要在功能上区别大了些,那么我们最好先了解一下什么是交换机和什么是路由器的最基本的常识。现在…...
做苗木网站哪家做得好/长春做网站推荐选吉网传媒好
洛谷P3018 [USACO11MAR]树装饰Tree Decoration树形DP 因为要求最小,我们就贪心地用每个子树中的最小cost来支付就行了 1 #include <bits/stdc.h>2 #define For(i, j, k) for(int ij; i<k; i)3 #define Dow(i, j, k) for(int ij; i>k; i--)4 #define LL…...
dedecms建站教程/2021小学生新闻摘抄
复制线程概述: MySQL完成主从复制,需要三个线程的参与:一个在(Master)主节点上,另外两个在(Slave)从节点上 1、(Master)Binlog Dump线程: 当有从节点连接到主节点时,主节点就创建一个线程将该主节点的bi…...
威海城乡建设委员会网站/seo技术团队
芯片封装详细介绍装配工艺一、DIP双列直插式封装DIP(DualIn-LINE PACKAGE)是指采用双列直插形式封装的集成电路芯片,绝大多数中小规模集成电路(IC)均采用这种封装形式,其引脚数一般不超过100个。采用DIP封装的CPU芯片有两排引脚,需…...
网站开发常问的技术性问题/西安关键词排名提升
http://blog.csdn.net/tcjiaan/article/details/8493072...