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

Shell 脚本入门

目录

一、Shell是什么

1.1 我们为什么要学习Shell和使用Shell?

1.2 Shell的分类有哪些?

二、Shell脚本入门知识

2.1 Shell文件命名规范

2.2 Shell解析器

2.3 用Shell 编写hello World

三、Shell的四种变量类型

3.1 系统预定义变量

3.2 自定义变量

3.3 只读变量和撤销变量

3.4 特殊变量


一、Shell是什么

1.1 我们为什么要学习Shell和使用Shell?

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。
Shell 既是一种命令语言,又是一种程序设计语言
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务

Shell属于内置的脚本,程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理)语法简单,代码写起来比较轻松,简单易学(运维人员)

1.2 Shell的分类有哪些?

在linux中有很多类型的shell,不同的shell具备不同的功能,shell还决定了脚本中函数的语法,Linux中默认的shell是 /bash/shell ( 重点\默认 ),流行的还有 /bin/sh 、 /bin/bash 、 /usr/bin/sh 、 /usr/bin/bash 、 /bin/tcsh 、 /bin/csh

查看流行的shell使用以下指令:

cat /etc/shells 

可以看到由以上类型的流行Shell

那么如何查看系统使用的Shell呢,使用以下指令即可:

echo $SHELL 

可以看到我们系统使用的shell是/bin/bash类型的 

二、Shell脚本入门知识

2.1 Shell文件命名规范

bash shell的默认后缀为 .sh

2.2 Shell解析器

#!/bin/bash

上面一行指定当前系统这个脚本要使用的shell解释器是/bin/bash 

2.3 用Shell 编写hello World

首先来创建一个目录scripts来存放shell脚本

mkdir scripts

然后创建Shell文件

touch hello.sh

hello.sh文件的内容

#!/bin/bash
echo "Hello World!"

执行文件有三种方式

bash ./hello.sh        #不需要加权限

sh ./hello.sh            #不需要加权限

./hello.sh                 #需要加权限

如果是第三种方式运行需要加权限,使用以下命令即可 

 chmod +x hello.sh

三、Shell的四种变量类型

变量本质上其实是在内存中开辟一个空间用来临时存储数据,例如: age = 20

全局变量和局部变量的区别

  • 全局变量:层层嵌套的子bash依然可以访问
  • 局部变量:只在当前的bash中可以访问,子bash和父bash都不能访问呢

3.1 系统预定义变量

常用系统变量

$HOME,$PWD,$SHELL,$USER

env命令查看当前所有的全局变量 

set查看当前所有变量 

明显比env命令后得到的变量要多! 

3.2 自定义变量

基本语法
定义变量:变量名=变量值
规则

  • 等号前后不能有空格
  • 在声明变量的时候是不需要添加 $ 符号,但是使用时候需要添加
  • 如果定义的是一个字符串,需要将值添加双引号或者单引号

温馨提示
查看定义的变量是全局还是局部

  • 全局: env | grep 变量名
  • 局部: set | grep 变量名

当然,你可以进入子bash中去尝试输出变量,无法输出则是局部变量,可以输出则是全局变量
全局变量
如何定义一个全局变量呢?需要先声明一个局部变量,然后再通过export 导出为一个全局变量
在子bash中修改全局变量,只会再当前环境中生效,不会影响父bash环境,哪怕是你增加 export 也依然不会影响到父bash环境
Shell脚本中使用变量
我们可以在 hello.sh 的脚本中去调用全局和局部变量
export 变量名

txt=10

export txt
#!/bin/bash
echo $txt
在shell脚本中使用变量,同样遵循全局和局部变量的规则

3.3 只读变量和撤销变量

只读变量

在shell中,只读变量相当于是常量,定义之后不允许修改。

定义规则

readonly 变量名=值

撤销变量

变量定义之后是可以撤销的,使用 unset 变量名 就可以撤销了
变量是可以撤销的,但是只读变量是不可以撤销的

3.4 特殊变量

在Shell中,存在一些特殊变量,他们具有特殊的意义

$n

$n 代表接受参数, n 是数字,代表在执行脚本时候传递的参数数量,例如 $1-$9 代表第一个到第九个参数,十以上的数字,可以使用大括号包裹,例如 ${10} 。比较特殊的是 $0 ,代表当前脚本名称

如下面这个例子n_test.sh:

 #!/bin/bash
echo "=====$n====="
echo "1st:" $1
echo "2st:" $2
echo "3st:" $3
echo $0

注意:$0代表是该脚本的文件名 

$#

$# 获取输入参数的个数,一般用于循环中,判断参数的个数是否正确,加强脚本的健壮性 

例如下面这个例子:

#!/bin/bash
echo "=====$#====="
echo 1st:$1
echo 2st:$2
echo 3st:$3
echo $# 

$* 和 $@

$* 和 $@ 非常相似,都代表命令行所有的参数,但是 $* 把参数看成是一个整体,例如 123 456 。而 $@ 把每个参数区分对待,例如 [123,456]

注意:在没有循环遍历时候,两者效果一致

例如下面这个例子:

#!/bin/bash
echo '=====$n====='
echo 1st:$1
echo 2st:$2
echo 3st:$3
echo '=====$*====='
echo $*
echo '=====$@====='
echo $@

$?

$? 最后一次执行命令的状态,如果是结果是0,证明上面执行的命令都是正确的,如果结果不是0(具体是哪个数字,由命令自己决定),则证明上面命令不正确了 

例如下面这个例子:

相关文章:

Shell 脚本入门

目录 一、Shell是什么 1.1 我们为什么要学习Shell和使用Shell? 1.2 Shell的分类有哪些? 二、Shell脚本入门知识 2.1 Shell文件命名规范 2.2 Shell解析器 2.3 用Shell 编写hello World 三、Shell的四种变量类型 3.1 系统预定义变量 3.2 自定义变…...

管理类联考——逻辑——形式逻辑——汇总篇——知识点突破——性质模态

性质&模态 角度一 角度二 矛盾关系 【对象】(1)所有、有的不;(2)所有不、有的;(3)某个、某个不。 【典例】①所有偶像都是靠颜值的。 ②有的偶像不是靠颜值的。 试分析: (1)如果①为真,试判断②的真假。 (2)如果①为假,试判断②的真假。 (3)①和②是否可…...

无涯教程-Android - ToggleButton函数

ToggleButton将已选中/未选中状态显示为按钮。它基本上是一个带有指示灯的开/关按钮。 Toggle Button ToggleButton属性 以下是与ToggleButton控件相关的重要属性。您可以查看Android官方文档以获取属性的完整列表以及可以在运行时更改这些属性的相关方法。 Sr.No.Attribute…...

unity VS无法进行断点调试

有时候我们的VS无法进行断点调试,报错如下: 原因是:开启了多个项目,vs无法找到调式项目 解决:点击菜单栏--调试----附加unity调试程序 会弹出一个框,然后选择你要调试的项目 即可...

Pandas由入门到精通-组合与合并数据

采集的数据存储后通常会分为多个文件或数据库,如何将这些文件按需拼接,或按键进行连接十分重要。这节将介绍数据索引的复杂操作如分层索引,stack,unstack,seet_index,reset_index等帮助重构数据,数据的拼接如merge,join,concat,combine_first等帮助连接数据,以及数据透视表…...

Unexpected mutation of “xxxx“ prop

原因 是因为子级修改了父级的数据,所以eslint执行的时候报了这个错 修复方式 1 如果是弹窗等组件,可以根据功能进行修改,比如我这块用的 element ui 的 dialog,便可以改成这样 使用 model-value 代替 修复方式 2 新建子组件…...

七、基础篇总结

...

前端面试基础面试题——2

1.什么是json? json可以存在哪几种数据类型?在什么时候用? 2.什么是作用域? 3.http和https分别是什么?区别是什么? 4.介绍一下js的节流与防抖? 5.什么是cookie?cookie的优缺点。 6.js的三种排序方法&#xff0…...

docker 搭建rknn转换环境

文章目录 下载rknn搭建docker 环境进入镜像并挂载运行代码 下载rknn https://github.com/rockchip-linux/rknn-toolkit2 搭建docker 环境 进入到docker 的文件目录下 docker build -t run:v3 . -f Dockerfile_ubuntu_18_04_for_cp36 进入镜像并挂载 docker run -it -v /ho…...

机器学习:争取被遗忘的权利

随着越来越多的人意识到他们通过他们经常访问的无数应用程序和网站共享了多少个人信息,数据保护和隐私一直在不断讨论。看到您与朋友谈论的产品或您在 Google 上搜索的音乐会迅速作为广告出现在您的社交媒体提要中,这不再那么令人惊讶。这让很多人感到担…...

MATLAB实现AHP层次分析法——以情人节选取礼物为例

问题背景: 情人节来临之际,广大直男(女)同胞在给异性朋友选购礼物时会遇到难题——什么才是礼物好坏最重要的标准?基于层次分析法AHP进行计算,得出最高权重的指标,给出各位朋友选购礼物的一种思…...

flutter使用Chanel与原生通信

在Flutter中,Platform Channel允许Flutter与原生平台(如Android和iOS)之间进行双向通信,以便在Flutter应用程序和原生代码之间传递消息和调用功能。 以下是使用Platform Channel与原生通信的一般步骤: 1. 在Flutter端…...

Kubernetes技术--k8s核心技术Helm

1.引入 我们先回顾一下之前部署一个应用的过程,如部署nginx,实现效果如下所示: -1.编写deployment的yaml文件,然后运行。 -2.使用service中的NodePort对外暴漏端口 -3.为了弥补Nodeport的缺陷,使用ingress实现转发 这样一个应用就部署完了,这一种情况相对于如果你需要部…...

C/C++学习——单例模式(懒汉模式与饿汉模式)

C/C学习——单例模式 一、什么是单例模式?二、单例模式应用三、单例模式的特点注意:静态成员变量的使用示例代码: 四、单例模式C代码示例(饿汉模式)五、单例模式C示例代码(懒汉模式) 一、什么是…...

企业微信网页开发本地调试方式

一、开启企业微信调试模式 首先在企业微信打开一个网页应用时,其实就是打开了一个微信环境的浏览器,此时想要检查网页元素,查看请求接口,需要开启调试模式。企业微信默认是不支持调试的,需要再单独下载一个文件放在安…...

Prompt GPT推荐社区

大家好,我是荷逸,这次给大家带来的是我日常学习Prompt社区推荐 Snack Prompt 访问地址:http://snackprompt.com Snack Prompt是一个采用的Prompts诱导填空式的社区,它提供了一种简单的prompt修改方式,你只需要输入关…...

小程序隐私保护授权处理方式之弹窗组件

欢迎点击关注-前端面试进阶指南:前端登顶之巅-最全面的前端知识点梳理总结 *分享一个使用比较久的🪜 小程序隐私保护授权弹窗组件 调用wx.getUserProfile进行授权时,返回错误信息:{errMsg: “getUserProfile:fail api scope is…...

Java 复习笔记 - 方法篇

文章目录 一,方法的定义二,最简单的方法定义和调用三,带参数的方法定义和调用四,带返回值方法的定义和调用五,小结六,方法的重载七,方法简单练习1,数组遍历2,数组最大值3…...

大数据到底是好是坏?_光点科技

近年来,随着科技的不断发展和互联网的普及,大数据已经成为一个备受关注的话题。它带来了许多机遇和挑战,引发了人们对于其是好是坏的争议。大数据究竟是一把双刃剑,需要我们从多个角度来审视。 大数据的好处无疑是显而易见的。首先…...

C++ while 循环

只要给定的条件为真,while 循环语句会重复执行一个目标语句。 语法 C 中 while 循环的语法: while(condition) {statement(s); }在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。condition 可以是任意…...

大话软工笔记—需求分析概述

需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM&#xff09…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...