Shell基础学习---1、Shell概述、脚本入门、变量

news2024/11/27 7:41:39

1、Shell 概述

Shell是一个命令解释器,它接收应用程序/用户命令,然后调用操作系统内核。
在这里插入图片描述
说明:Shell是一个功能相当强大的编程语言,易编写,易调试、灵活性强。
1、 提供的Shell解释器
在这里插入图片描述
2、bash和sh的关系
在这里插入图片描述
3、CentOS默认的解析器是bash
在这里插入图片描述

2、Shell 脚本入门

1、脚本格式
脚本以#!/bin/bash开头(指定解析器)
2、第一个Shell脚本:helloworld.sh。
(1)需求:创建一个Shell脚本,输出helloworld
(2)案例实操
在这里插入图片描述
3、脚本的常用执行方式
(1)采用bash或sh+脚本的相对路径或绝对路径(不用赋予脚步+x权限)

sh+脚本的相对路径
在这里插入图片描述
sh+脚本的绝对路径
在这里插入图片描述
bash+脚本的相对路径
在这里插入图片描述
bash+脚本的绝对路径
在这里插入图片描述
(2)采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
首选要赋予helloworld.sh脚本的+x权限
在这里插入图片描述
利用相对路径执行脚本

在这里插入图片描述
利用绝对路径执行脚本
在这里插入图片描述
注意:第一种执行方法本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚步需要自己执行,所有需要可执行权限。
(3)在脚本路径前加上‘.’或者source(个人觉得很重要)
1、有以下脚本
在这里插入图片描述
2、分别使用sh、bash、./、和. 的方式执行。结果如下:
(1)sh
在这里插入图片描述
(2)bash
在这里插入图片描述
(3)./
在这里插入图片描述

(4).
在这里插入图片描述
很明显这四个命令执行之后echo $A,不能发现前三个是一样的显示不了,只有最后一个命令才能显示出!!!
原因:
前两种方式都是在当前shell中打开一个子shell来执行脚步内容,当脚本内容结束,则子shell关闭,回到父Shell中。

后两种,也就是使用在脚本路径前加‘.’或者source方式,可以使脚本内容在当前shell里执行,而无需打开子shell!这也就是为什么我们每次修改完/etc/profile文件以后,需要source一下的原因。

开子shell和不开子shell的区别就在于环境变量的继承关系,如在子shell中设置的当前变量,父shell1是看不见的。所有利用前两种方式执行脚本变量A在父shell是没有值的!!!

3、变量

3.1 系统预定义变量

1、常用系统变量
HOME 、PWD、SHELL、USER等
2、案例实操
(查看系统变量的值)
在这里插入图片描述
(显示当前Shell中所有变量:set)
在这里插入图片描述

3.2 自定义变量

1、基本语法
(1)定义变量:变量名=变量值(注意:=号前后不能有空格)
(2)撤销变量:unset 变量名
(3)声明静态变量:readonly 变量名 (注意:不能unset)
2、变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
3、案例实操
(1)定义变量A
在这里插入图片描述
(2)给变量A重新赋值
在这里插入图片描述
(3)撤销变量A
在这里插入图片描述
(4)声明静态的变量C=2,不能unset
在这里插入图片描述
(5)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
在这里插入图片描述
(6)变量的值如果有空格,需要使用双引号或单引号括起来
在这里插入图片描述
(7)可以把变量提示为全局环境变量,可供其他Shell程序使用。
在这里插入图片描述

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、案例实操
在这里插入图片描述

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

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

相关文章

简述-关于Kmeans轮廓系数随着聚类个数的增加后减少的问题

当我们在做Kmeans聚类的准备工作时,通常会用到手肘法(elbow method)或者轮廓系数(silhouette score)去找到最佳簇类个数。 对于轮廓系数寻找法,理论上来说,轮廓系数会随着聚类个数的增加而增加…

云渲染是什么?云渲染和传统渲染农场有什么区别?

云渲染是什么?云渲染和传统渲染农场有什么区别? 今天云渲染小编就来和大家说一说云渲染以及它和传统渲染农场的区别。 一、什么是云渲染?云渲染什么意思? 首先云渲染云渲染是一种依托于云计算的云端服务,用户将本地…

UVM 验证方法学之interface学习系列文章(七)高级 《bind 操作》(3)

在之前的文章,我们就bind 机制,进行了用法分析。其实,对于一些大型的复杂SOC设计,bind的操作,可以说是非常实用的。它不仅能够完成各种UVC的驱动激励操作,而且一定程度能够简便验证平台的搭建和后期维护。下面,我们举个例子说明bind在当今复杂环境下的妙用。 一 TB 思…

聊一聊API 测试有哪些不同类型?

用户希望能够跨设备和浏览器使用应用程序。因此,您必须进行全面的不同 API 测试类型,以了解它的工作情况以及它是否可以执行其主要功能。一些测试人员需要更多地关注这方面,因此,我们看到许多质量较差的应用程序。今天&#xff0c…

23. Unity - 3D游戏开发小计02 --- 动画结束UI、导航网格代理

1. 动画结束UI 一个游戏在通过后,都是需要一个界面显示当前游戏已经结束,即需要给游戏添加一个结束的界面,可以做一个简单的游戏结束界面,用一个图片展示: 首先在层级窗口添加两层UI中的Image,其中第一层的Image仅作背景,可将其填充颜色设置为纯黑色,第二层的Image添加…

消化道炎症 | 细菌蛋白酶失调的作用

谷禾健康 肠道蛋白酶 蛋白水解平衡失调通常与疾病有关。例如丝氨酸蛋白酶和基质金属蛋白酶参与多种生物过程,尤其是炎症反应。 胃肠道拥有数以万亿计的微生物,并暴露于高水平的蛋白酶。研究表明蛋白酶在维胃肠道稳态中的关键作用,它们的上调…

代搭建开发chatgpt

ChatGPT是由OpenAI开发的一款自然语言处理模型,而且它已经预训练好了。基于它开发ChatGPT应用程序需要以下步骤: 准备环境:安装Python3和相关的库,如TensorFlow、Keras等,并下载预训练的ChatGPT模型。 数据准备…

深度学习用于医学预后-第二课第三周8-13节-估计生存函数

上节课知道了数据中存在删失数据,那么我们如何利用这些数据建立生存函数。这将是本节课的重点内容。 文章目录 估计生存函数立即死亡还是永远存活生存概率介于两者之间使用删失数据条件概率的链式法则推导生存函数根据数据计算概率 估计生存函数 本节课,…

API安全性的要素与开发人员必修课测试

一、API安全性的要素主要包括以下几点: 1.身份验证和访问控制:API应该通过身份验证来验证请求的源,确保只有授权的用户或应用程序才能访问API。这可以通过使用API密钥、访问令牌、OAuth令牌或其他身份验证机制实现。 2.数据加密:A…

OpenCV中的图像处理3.9(七)轮廓线及其层次结构

目录 3.9.4 轮廓线:更多的功能目标理论和代码练习 3.9.5 轮廓线层次结构目标理论什么是层次结构?OpenCV中的层次结构表示法轮廓线检索模式 翻译及二次校对:cvtutorials.com 编辑者:廿瓶鲸(和鲸社区Siby团队成员&#x…

Pyqt5经典案例学习

目录 前言一、图表主题动画1-1、效果展示1-2、代码分段解析1-2-1、导库1-2-2、初始化1-2-3、数据生成函数以及信号与槽的连接 总结 前言 案例来源于GitHub项目《各种各样的PyQt测试和例子》 一、图表主题动画 1-1、效果展示 功能: 支持不同的主题和动画效果。用户…

Linux环境下的VScode使用教程

前言 (1)对于学习本文需要先有自行安装好VMware,对VMware有简单的了解。 (2)对于绝大多数使用Linux的人而言,经常在Windows环境下使用source insight进行编译程序,然后利用FileZilla将Windows的…

Ansys仿真寄生参数对信号反射的影响

1、短桩线传输线的反射 短桩线在PCB走线时会经常遇到,这个桩线会对信号的传输产生反射,那么桩线的长度和信号反射的关系可以仿真看一下,电路如下图所示,下图中,我们设置信号源的上升下降时间为0.8ns,桩线的…

Auto GPT 与 ChatGPT:有何区别?

人工智能正在迅速发展,即使是最熟练的人也越来越难以跟上。每隔一段时间,就会出现新的 AI 工具,在这些工具中,有些是时尚的,有些是真正有价值的。 Auto-GPT 是一种建立在 ChatGPT 技术之上的人工智能,很可…

leaflet根据坐标点设置多边形,生成geojson文件,计算面积值(133)

第133个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中根据坐标点设置多边形,通过.toGeoJSON() 来生成geojson文件,通过turf.area来计算面积值。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共123…

浅谈Redis7基础命令

Redis基本命令 Ping命令 心跳命令 set & get命令 set key value get key select命令 切换数据库 dbsize命令 flushdb命令 清除当前数据库数据 flushell命令 清除所有数据库数据 退出命令 quit、exit 关闭redis redis-cli shutdown shutdown 查看进程及端口号 #查看…

VirtualBox ping和xshell切换

使用virtualbox有一个奇怪的现象,每次连接xshell的时候ping百度,ping不通,能ping通的时候又连接不了xsell。 两种模式来回切换每次都要查要修改的东西,太麻烦了,就在这记录一下。 连接xshell 选中想要链接xshell的虚…

python3 安装 bz2包

python3 安装 bz2包 错误解决方法1、pip 安装2、重装python3(网上推荐,但没尝试)3、补全缺少文件(博主采用) 错误 ModuleNotFoundError: No module named _bz2 解决方法 1、pip 安装 尝试 pip3 install bz2 发现并…

一篇文章搞定《Android中的ANR》

------《ANR》 什么是ANR举个例子帮你认识ANRANR的产生原因ANR的监控手段方法一: 监控trace文件夹方法二:利用我们主线程的Looper方法三:监控SIGQUIT信号 ANR日志Traces.txtTraces文件分析几个分析案例:一、好定位的问题(简单案例…

使用FastGithub解决国内访问GitHub失败的问题

问题提出 在ArduinoIDE安装开发板开发包、库时经常由于这些包和库的索引指向的是github下面的开源项目,所以安装失败的可能性极高。开启了FastGithub后,更新成功率和速度都快了很多! 问题解决 使用FastGithub开源工具(支持Win,Ma…