Linux【系统学习】(shell篇)

news2024/9/22 11:25:46

1 Shell 概述

1Linux 提供的 Shell 解析器有 

Ubuntu 使用的是dash

2bash sh 的关系

3Centos 默认的解析器是 bash

2 Shell 脚本入门

1)脚本格式 (结尾不是必须以 .sh 结尾,只是为了区分
脚本以#!/bin/bash 开头(指定解析器)
2)第一个 Shell 脚本:helloworld.sh
1)需求:创建一个 Shell 脚本,输出 helloworld
(2)案例实操:
(3)脚本的常用执行方式
第一种:采用 bash sh+脚本的相对路径或绝对路径(不用赋予脚本+x 权限)
sh+脚本的相对路径

sh+脚本的绝对路径

bash+脚本的相对路径

bash+脚本的绝对路径 

 第二种:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x,之前不需要是因为执行的是bin下的bash脚本,而文件是参数,这里相当于单独执行

①首先要赋予 helloworld.sh 脚本的+x 权限

②执行脚本  
相对路径

绝对路径 

注意:第一种执行方法,本质是 bash 解析器帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。
【了解】第三种:在脚本的路径前加上“.”或者 source
①有以下脚本

②分别使用 shbash./ . 的方式来执行,结果如下:

原因:
前两种方式都是在当前 shell 中打开一个子 shell 来执行脚本内容,当脚本内容结束,则子 shell 关闭,回到父 shell 中。
第三种,也就是使用在脚本路径前加“.”或者 source 的方式,可以使脚本内容在当前shell 里执行,而无需打开子 shell!这也是为什么我们每次要修改完/etc/profile 文件以后,需要 source 一下的原因。
开子 shell 与不开子 shell 的区别就在于,环境变量的继承关系,如在子 shell 中设置的当前变量,父 shell 是不可见的。

3 章 变量

3.1 系统预定义变量

1 )常用系统变量
$HOME、$PWD、$SHELL、$USER 等
命令    env 可以查看当前 系统 全局 变量
2)案例实操
1)查看系统变量的值

(2)显示当前 Shell 所有变量set

3.2 自定义变量

这里有一个很重要的概念,外部shell的全局变量对于内部嵌套的子shell是共享的,但是局部变量子shell不可见。和java不太一样。即便是全局变量,子shell更改了它的值,也只是在子shell里面赋值,退出之后的父shell并没有变化。

1)基本语法
1)定义变量:变量名=变量值,注意,=号前后不能有空格
(2)撤销变量:unset 变量名
(3)声明静态变量:readonly 变量,注意:不能 unset
(4)声明全局变量:先声明并赋值一个局部变量,然后在外层shell 使用 export【变量名】,这个全局变量,只在当前会话有效
2)变量定义规则
1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建 议大写
(2)等号两侧不能有空格
(3)在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
3)案例实操
1)定义变量
(2)给变量 A 重新赋值 

 

(3)撤销变量

(4)声明静态的变量 B=2,不能 unset

(5)在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算

(6)变量的值如果有空格,需要使用双引号或单引号括起来

(7)可把变量提升为全局环境变量,可供其他 Shell 程序使用

 helloworld.sh 文件中增加 echo $B

发现并没有打印输出变量 B 的值

3.3 特殊变量

3.3.1 $n

1 )基本语法
$n (功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
补充:单引号勾选的内容不会把变量符号  $ 识别为变量符号,而是识别为字符串。双引号可以正常识别
2 )案例实操

3.3.2 $#

1 )基本语法
$# (功能描述:获取所有输入参数个数,常用于循环, 判断参数的个数是否正确以及加强脚本的健壮性)
2 )案例实操

3.3.3 $*$@

1 )基本语法
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待,类似于数组
2 )案例实操

3.3.4 $

1 )基本语法
$?功能描述最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了
2 )案例实操
判断 helloworld.sh 脚本是否正确执行

4 章 运算符

在此之前,想要计算表达式,可以借助 expr 命令,但是想要获取值相当于把输入的运算符当作一个参数,那么此前我们要求字符间不能有空格,现在就必须添加空格。但是像乘号 * 这样还作为通配符的符号,我们还需要加反斜杠转义,太麻烦了,所以特别增添运算符来帮助获取具体的值

想要把表达式的值传入别的表达式,只能通过反引号包裹,或者是: $($(expr xxxx))

1 )基本语法
“$((运算式))” 或 “$[运算式]”
2)案例实操:
计算(2+3)* 4 的值

5 章 条件判断 

3)案例实操 

6 章 流程控制(重点)

6.1 if 判断

1)基本语法 

2 )案例实操
输入一个数字,如果是 1 ,则输出 banzhang zhen shuai ,如果是 2 ,则输出 cls zhen mei
如果是其它,什么也不输出。

6.2 case 语句

1 )基本语法

6.3 for 循环 

6.4 while 循环 

7 read 读取控制台输入 

8 章 函数

8.1 系统函数

8.1.1 basename

8.1.2 dirname 

 8.2 自定义函数

9 章 正则表达式入门

正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。在 Linux 中,grep, sed,awk 等文本处理工具都支持通过正则表达式进行模式匹配。

9.1 常规匹配

9.2 常用特殊字符 

10 章 文本处理工具

10.1 cut

10.2 awk  

11 章 综合应用案例

11.1 归档文件

11.2 发送消息 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《网络安全0-100》VPN 讲解

1、前言 VPN虽好可不要贪玩哦 2、VPN的概念和结构 VPN:虚拟专用网(virtual personal network)是利用internet等公共网络的基础设施,通过隧道技术,为用户提供的专用网络具有相同通信功能的安全数据通道。 ‘虚拟’是指用户无需建立各逻辑上的专用物理线…

​AVS3支持下的8K内容生产和传输应用实践

AVS标准经过20年发展,到AVS3这一代实现了国产标准从跟跑到领跑的突破。博雅睿视团队深度参与AVS3标准制定,开发的8K AVS3实时、离线编解码设备有力支持了我国8K超高清视频产业的落地和推广。 本次分享将会分为三个部分,第一部分重点介绍AVS标…

MusicGen配乐工具开源,教你怎么给抖音短视频配乐,助你涨粉1000!

大家好,我是千与千寻,好久不见了,很多粉丝私信我说,千寻哥这是去哪了?难道被野外捕捉了。 哈哈哈,当然不是了,千寻依然在学习ChatGPT的道路上和大家一起学习,一起搞钱! 但…

TC8:TCP_MSS_OPTIONS_05-09

TCP_MSS_OPTIONS_05: Illegal option length for MSS in a SYN-ACK segment 目的 TCP能够处理SYN+ACK报文段中MSS选项的长度非法,而不会崩溃 可以正常地响应,就是不崩溃,这里指的应该是DUT发送ACK 测试步骤 Tester:让DUT侧的应用程序发起主动open调用DUT:发送SYNTester:…

C++类和对象--构造函数和析构函数

0.前言 在我们写某些需要动态开辟内存空间的函数时候,会经常忘记初始化、销毁,而且有时候程序返回的情况很多,那么销毁函数写起来就会很繁琐,那么有没有什么办法解决这个问题呢?答案是:当然有!在…

Java类 继承

Java是一种面向对象的编程语言,类是Java中最基本的编程单元。一个类可以包含变量、方法和构造函数等。类的定义需要使用关键字class,例如: public class Person { private String name; private int age; public Person(St…

文心一言 VS 讯飞星火 VS chatgpt (44)-- 算法导论6.1 1题

一、在高度为h的堆中,元素个数最多和最少分别是多少? 文心一言: 在高度为 h 的二叉搜索树(BST)中,元素个数最多和最少的情况分别如下: 1.最多情况:当每个节点都包含两个子节点时&#xff0c…

CSS3-盒子模型-边距问题

1 清除默认内外边距 场景:浏览器会默认给部分标签设置默认的margin和padding,但一般在项目开始前需要先清除这些标签默认的margin和padding,后续自己设置 比如:body标签默认有margin:8px、p标签默…

一句提示词生成整个代码库——Gpt Engineer神级项目开源(附演示视频)

近日,一个名为Gpt Engineer神级项目开源,并迅速火爆全网。 短短几天内,该项目已经得到了25K的星星。 使用GPT-engineer进行人工智能软件开发,可以改变软件开发的未来。 在软件开发领域,一场巨大的革命正在开始。这一转…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(6月 22 日论文合集)

文章目录 一、检测相关(9篇)1.1 Wildfire Detection Via Transfer Learning: A Survey1.2 Polygon Detection for Room Layout Estimation using Heterogeneous Graphs and Wireframes1.3 Exploiting Multimodal Synthetic Data for Egocentric Human-Object Interaction Detec…

前端中的相关概念

谁道人生无再少, 门前流水尚能西。 桃花落尽胭脂透, 庭院无声五更鸡。 —— 杜甫《端午节》 HTML中class属性 HTML中class属性是一种用于为元素定义样式和标识的属性,以下是class属性的几种常见用法实例,包括标识元素、定义样…

利用OpenCV计算条形物体的长度

0、前言 在图像处理中,我们可能会遇到求一个线条长度的场景,比如,现在有一条裂缝,需要求其长度,或者有一个长条形的零件需要知道其长度。 本文利用OpenCV和skimage两个库,提供了一个解决方案。 1、解决步…

贪心法与动态规划的对比分析

高级算法设计课程论文 题 目:贪心法与动态规划的对比分析 作者姓名: 作者学号: 专业班级: 提交时间: 2023/6/3 目 录 1 引言 1 2 分析过程 2 2.1多段图的最短路径问题 2 2.2最小生成树问题 4 3动态规划与贪心法的对…

【动态规划算法练习】day3

文章目录 一、931. 下降路径最小和1.题目简介2.解题思路3.代码4.运行结果 二、64. 最小路径和1.题目简介2.解题思路3.代码4.运行结果 三、面试题 17.16. 按摩师1.题目简介2.解题思路3.代码4.运行结果 总结 一、931. 下降路径最小和 1.题目简介 931. 下降路径最小和 题目描述&…

浅析 GeoServer CVE-2023-25157 SQL注入

原创稿件征集 邮箱:eduantvsion.com QQ:3200599554 黑客与极客相关,互联网安全领域里 的热点话题 漏洞、技术相关的调查或分析 稿件通过并发布还能收获 200-800元不等的稿酬 更多详情,点我查看! 简介 GeoServer是一个开…

十八、网络基础(一)

一、协议 (一)前置 协议其实是一种约定!!! 计算机之间的传输媒介是光信号和电信号 , 通过 " 频率 " 和 " 强弱 " 来表示 0 和 1 这样的信息 , 要想传递各种不同的信息 , 就需要约定好双方的数据…

(自己动手开发自己的语言练手级应用)JSON(JavaScript Object Notation) 产生式(BNF)

写自己的开发语言时&#xff0c;很多人都会拿JSON当第一个练习对象 开源net json FJSON 解析工具https://dbrwe.blog.csdn.net/article/details/107611540?spm1001.2014.3001.5502 <json> :: <object> | <array> <object> :: "{" [ <me…

分布式学习第三天 nginx学习

目录 1. 一些基本概念 1.1 Nginx初步认识 1.2 正向/反向代理 1.3 域名和IP 2. Nginx 安装和配置 2.1 安装 2.2 配置 3. Nginx的使用 3.1 部署静态网页 3.2 反向代理和负载均衡 课外知识导读 1. URL和URI 2. DNS解析过程 复习 1. 一些基本概念 1.1 Nginx初步认识…

团体程序设计天梯赛-练习集L1篇②

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;Hello大家好呀&#xff0c;我是陈童学&#xff0c;一个与你一样正在慢慢前行的普通人。 &#x1f3c0;个人主页&#xff1a;陈童学哦CSDN &#x1f4a1;所属专栏&#xff1a;PTA &#x1f381;希望各…

在我掉入计算机的大坑并深陷其中时,一门名为“C语言”的编程语言让我沉迷

各位CSDN的uu们你们好呀&#xff0c;小雅兰好久没有更新博客啦&#xff0c;今天来小试牛刀&#xff01;&#xff01;&#xff01; 上一篇博客小雅兰是说自己原本是自动化专业的学生&#xff0c;但是因为一次偶然的机会对计算机的相关知识产生了浓厚的兴趣。那么&#xff0c;小雅…