课程视频:【【尚硅谷】Shell脚本从入门到实战】

一、Shell概述

为什么要学习Shell?

1)需要看懂运维人员的Shell程序

2)偶尔编写一些简单的Shell程序来管理集群、提高开发效率

什么是Shell?

1)Shell是一个命令行解释器,它接受应用程序/用户命令,然后调用操作系统内核。

2)Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。

二、Shell解析器

Linux提供的Shell解析器有:/bin/sh、/bin/bash等。

sh实际是软连接直接指向bash

三、Shell脚本入门

1、脚本格式

#!/bin/bash开头(指定解析器)

2、创建一个helloworld脚本

创建脚本文件:touch helloworld.sh

#!/bin/bashecho "helloworld"

运行脚本:sh helloworld.sh或bash helloworld.sh或./helloworld.sh(用户执行,需要有权限)

3、创建一个多命令处理脚本

要求在/home/目录下创建一个banzhang.txt,在该txt文件中增加“I love cls”.

创建脚本文件:touch batch.sh

#!/bin/bashcd /home/
touch banzhang.txt
echo "I love cls" >> banzhang.txt

运行脚本:bash batch.sh

四、Shell中的变量

系统变量

$HOME、#PWD、$SHELL、$USER等

查看变量值:echo+变量名。如:echo $HOME。

自定义变量

1)定义变量:变量=值。如:NUM=1。

2)撤销变量:unset 变量。如:unset NUM。

3)声明静态变量:readonly 变量(不能被撤销unset)。如:readonly NUMBER=2。

自定义变量定义规则

1)变量名可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。

2)等号两侧不能有空格。

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

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

5)把变量提升为全局环境变量,可供其他Shell程序使用:export 变量名。如:export NUMBER。

特殊变量$n、$#、$*、$@、$?

$n:其中n为数字,$0表示该脚本的名字,$1-$9表示传入脚本的1-9个参数。

#!/bin/bash
#创建一个名为parameter.sh的脚本
echo "$0 $1 $2"

运行bash parameter.sh ABC 123,会输出parameter.sh ABC 123。

$#:获取所有输入参数个数。

#!/bin/bash
#创建一个名为parameter.sh的脚本
echo "$0 $1 $2"
echo $#

运行bash parameter.sh ABC 123 abc,会输出

parameter.sh ABC 123

3。

$*:代表命令行中的所有参数,$*把所有的参数看成一个整体。

$@:代表命令行中的所有参数,$@把每个参数区分对待。

#!/bin/bash
#创建一个名为parameter.sh的脚本
echo "$0 $1 $2"
echo $#
echo $*
echo $@

运行bash parameter.sh ABC 123 abc,会输出

parameter.sh ABC 123

3

ABC 123 abc

ABC 123 abc。

$?:最后一次执行命令的返回状态。0表示正确执行,非零表示没有正确执行。

五、运算符

基本语法

1)$((运算式))或$[运算式]

2)expr + - \* /% (expr运算符之间必须有空格

实操

计算2+3:expr 2 + 3

计算(2+3)*4,expr `expr 2 + 3` \* 4 或 $[(2+3)*4]

六、条件判断

基本语法

[ condition ](condition前后要有空格,条件非空即为true)

常用判断条件

常用判断条件
=字符串比较
-lt小于-le小于等于
-eq等于-gt大于
-ge大于等于-ne不等于
按照文件权限进行判断:
-r有读的权限
-w有写的权限
-x有执行的权限
按照文件权限进行判断:
-f文件存在且是一个常规文件
-e文件存在
-d文件存在且是一个目录

如:

判断23是否小于22:[ 23 -le 22 ]

判断helloworld.sh是否具有写权限:[ -w helloworld.sh]

多条件判断

&&表示前一条命令执行成功后,才执行后一条命令;

||   表示上一条命令执行失败后,才执行下一条命令。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES6 对象扩展:对象简写,对象属性 表达式,扩展运算符 ...,Object.assign,Object.is,用法和应用场景

1. 对象属性简写 1.1 基本语法 // 传统写法 const name John; const age 25; const user {name: name,age: age };// ES6 简写语法 const user {name,age };1.2 实际应用场景 // 1. 函数返回对象 function createUser(name, age, email) {return {name,age,email}; }// …

【2025】camunda API接口介绍以及REST接口使用(3)

前言 在前面的两篇文章我们介绍了Camunda的web端和camunda-modeler的使用。这篇文章主要介绍camunda结合springboot进行使用,以及相关api介绍。 该专栏主要为介绍camunda的学习和使用 🍅【2024】Camunda常用功能基本详细介绍和使用-下(1&…

Java进阶学习之路

Java进阶之路 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 Java进阶之路前言一、Java入门 Java基础 1、Java概述 1.1 什…

JAVA安全—反射机制攻击链类对象成员变量方法构造方法

前言 还是JAVA安全,哎,真的讲不完,太多啦。 今天主要是讲一下JAVA中的反射机制,因为反序列化的利用基本都是要用到这个反射机制,还有一些攻击链条的构造,也会用到,所以就讲一下。 什么是反射…

TfidfVectorizer

TF-IDF / Term Frequency - Inverse Document Frequency 作用:是自然语言处理NLP中常用的文本特征提取工具,用于将文本数据转换为数据向量。 核心思想:是通过统计词频和逆文档频率来量化词语在文本中的重要性。 T F − I D F ( t , d ) T F…

DeepSeek-R1 论文解读:强化学习如何 “炼” 出超强推理模型?

深度解析DeepSeek-R1:强化学习驱动大语言模型推理能力新突破 论文链接:DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 在大语言模型(LLMs)飞速发展的当下,提升模型推理能力成…

【数据结构】循环链表

循环链表 单链表局限性单向循环链表判断链表是否有环思路code 找到链表入口思路代码结构与逻辑 code 单链表局限性 单链表作为一种基本的数据结构,虽然在很多场景下都非常有用,但它也存在一些局限性: 单向访问:由于每个节点仅包含…

ip属地是手机号还是手机位置?一文理清

在数字化和网络化的今天,IP属地这一概念逐渐成为了人们关注的焦点。特别是在社交媒体和在线平台上,IP属地的显示往往让人联想到用户的地理位置。然而,关于IP属地到底与手机号还是手机位置有关,却存在着不少误解和混淆。本文将深入…

【嵌入】基于nomic-embed-text-v1.5和HuggingFaceEmbeddings实现

测试代码 model_name = /media/zhangbin/DATA/DataCache/nomic-ai/nomic-embed-text-v1.5import osos.environ[HF_HOME] = /media/zhangbin/DATA/DataCache/#os.environ["TRANSFORMERS_CACHE"] = "/media/zhangbin/DATA/DataCache/" # 确保目录结构正确 if…

离散时间傅里叶变换(DTFT)公式详解:周期性与连续性剖析

摘要 离散时间傅里叶变换(DTFT)是数字信号处理领域的重要工具,它能将离散时间信号从时域转换到频域,揭示信号的频率特性。本文将深入解读DTFT公式,详细阐述其具有周期性和连续性的原因,帮助读者全面理解DT…

哈希表与散列表的原理及C++实现

1. 什么是哈希表? 哈希表(Hash Table)是一种高效的数据结构,用于存储键值对(Key-Value Pairs)。它通过哈希函数(Hash Function)将键(Key)映射到一个固定大小…

图像分类与目标检测算法

在计算机视觉领域,图像分类与目标检测是两项至关重要的技术。它们通过对图像进行深入解析和理解,为各种应用场景提供了强大的支持。本文将详细介绍这两项技术的算法原理、技术进展以及当前的落地应用。 一、图像分类算法 图像分类是指将输入的图像划分为…

前端框架中 HTML 的应用技巧:React、Vue、Angular 深度解析

系列文章目录 01-从零开始学 HTML:构建网页的基本框架与技巧 02-HTML常见文本标签解析:从基础到进阶的全面指南 03-HTML从入门到精通:链接与图像标签全解析 04-HTML 列表标签全解析:无序与有序列表的深度应用 05-HTML表格标签全面…

Vue - customRef 自定义ref

customRef 作用:创建一个自定义的 ref , 并对其依赖项跟踪和更新触发进行逻辑控制。 在原生 ref 的基础上,添加自己的逻辑等... 在 Vue 3 中,customRef 是一个用于创建自定义响应式引用的 API。它允许开发者控制和优化响应式引用的行为&…

数字化转型:概念性名词浅谈(第四讲)

​大家好,本篇文章是在新年之际写的,所以在这里先给大家拜个年。 今天要介绍的名词为ETL: ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transfor…

UE学习日志#22 C++笔记#8 基础复习8 string和string_view2

1 std::string_view类 string_view基本上就是const string&的简单替代品,但不会产生开销。他不复制字符串。 string_view添加了remove_prefix(size_t)和remove_suffix(size_t)方法,前者将起始指针给定的偏移量来收缩字符串,后者则将结尾指…

UVM factory机制

目录 1. factory-register 1.1 uvm_object_registry#(type T=uvm_object, string Tname="") 1.1 uvm_default_factory::register 2. factory-override 2.1 set_type_override(uvm_object_wrapper override_type) 2.2 set_inst_override(uvm_object_wrapper ove…

Spring MVC学习——发送请求(@RequestMapping注解及请求参数绑定)

前言 Spring MVC作为Spring框架中的核心组件之一,其强大的功能在于能简洁高效地处理HTTP请求和响应。在开发Web应用时,理解和正确使用Spring MVC的注解,尤其是RequestMapping注解,至关重要。本文将详细讲解RequestMapping注解的使…

C# Action和 Func的用法

C#中的数据类型 函数数据类型 Action 是一个数据类型 但是是没有返回值得函数数据类型 Func 用于指定一个有返回值的委托 internal class Program{static void Main(string[] args){TT.F1(NoVoid);TT.F2(Void1);Void2(() > { Console.WriteLine("Void2执行了");…

C++中的模板(上)

C中的模板(上) 模板参数和函数参数是很像的,函数参数定义的形参对象,而模板参数定义的是类型. 模板分为函数模板和类模板 函数模板 一个交换两个数的函数模板: template<class T> // 此处typename和class是等价的 void Swap(T &a, T &b) {T temp a;a b;b …