Shell脚本、相关命令;重定向、管道符、变量相关命令讲解

news2024/10/25 2:25:24

目录

Shell脚本

概念

执行命令流程的交互区别

交互式

非交互式

Shell脚本应用场景

Shell的作用

Shell的作用 —— 命令解释器,“翻译官”

列出系统中全部解释器

实验

脚本的基本书写格式和执行命令

在子bash下执行脚本

指定解释器的方式执行脚本

指定路径方式执行脚本

相对路径

绝对路径

直接加载脚本

重定向

覆盖输出

追加输出

重定向输入

通过脚本实现

错误重定向

管道符

相关命令

变量

取消变量

命名规则

变量赋值

引号

反撇号 `

使用$()嵌套命令

交互式变量声明

作用范围

局部变量

全局变量

永久保存变量

数字变量操作

变量查看

特殊变量

$#

$*

$@

$0

$!和$$

$?


Shell脚本

概念

  • 将要执行的命令按顺序保存到一个文本文件
  • 给该脚本文件可执行权限
  • 可结合各种Shell控制语句以完成更复杂的操作

执行命令流程的交互区别

  • 交互式
    • 用户直接与命令行交互,实时输入和接收命令行程序的输出
  • 非交互式
    • 命令在执行时按照脚本文件中预先定义好的指令顺序执行,并且通常不会从用户终端获取输入
    • Shell脚本执行的流程就是非交互式

Shell脚本应用场景

  • 重复性操作
  • 交互性任务
  • 批量事务处理
  • 服务运行状态监控
  • 定时任务执行
  • 巡检

Shell的作用

  • Shell的作用 —— 命令解释器,“翻译官”

    • 介于系统内核与用户之间,负责解释命令行,解释的结果发送给内核,内核再向硬件发送指令。
    • 每个操作系统都可以支持多个不同的解释器
    • 每个系统的解释器不一定支持相同的脚本
列出系统中全部解释器

CentOS系统默认的解释器就是bash


实验

脚本的基本书写格式和执行命令

新建并编辑一个脚本文件

#!/bin/bash:声明,只有写在第一行才生效,如果写在其他行就变成注释的作用,告诉系统执行该脚本只能用bash解释器来解释

按照执行顺序编写如下语句,像 ll 这种使用别名的命令在脚本中是不识别的,所以使用 ls -l

保存并退出

在子bash下执行脚本

先打开一个子bash,然后执行脚本,执行完再退出子bash

相当于运行了一遍如下步骤

为了更好理解bash命令,看下图


指定解释器的方式执行脚本

使用bash命令执行脚本文件,如果通过指定解释器的命令执行脚本文件就可以不在脚本文件内容中加入声明#!/bin/bash

使用 sh 命令指定sh解释器执行脚本,虽然解释器名称不同,但是sh在CentOS 7系统中是bash解释器的软链接

指定路径方式执行脚本

需要拥有被执行脚本的执行权限

相对路径

直接输入脚本文件的相对路径来执行脚本

并使用chmod命令添加执行权限

绝对路径

直接输入脚本文件的绝对路径来执行脚本


直接加载脚本

在当前解释器下直接执行脚本

使用 . 脚本文件source 脚本文件 来执行脚本,但是执行方式是有区别的,


将脚本修改为如下,增加echo命令和注释,更方便管理者使用,保存并退出

结果


重定向

重新定义输出的方向

  • 尖括号往右指是重定向标准输出 >、>>
  • 尖括号往左指是重定向输入

覆盖输出

使用echo命令实现本该输出在终端的信息输出进文件中

重定向输出 ls 内容,还覆盖了上一次重定向的内容(nihao)

追加输出

使用>>两个尖括号追加内容到指定文件

重定向输入

输出新建一个存放密码的文件

新建一个用户

比如修改一个用户的密码,通过passwd的--stdin选项,指定标准输入的设备,默认设备是键盘,这里指定为文件,就将密码设为文件中的字符串了

前提是关闭内核安全机制

通过脚本实现

新建脚本文件

将要执行的命令添加进脚本

此时执行该脚本

错误重定向

把提示的错误信息单独提取出来放入文本中

  • 标准输出:1>
    • 正常信息输出到指定文件,错误信息在终端显示
  • 错误输出:2>
    • 正常信息在终端显示,错误信息输出到指定文件中
  • 标准输出和错误输出同时重定向:&>
    • 正常信息和错误信息都输出到指定文件中

比如在检测一个源码软件包所需依赖时

使用 ./configure 2> error.log 命令

管道符

作用:过滤

比如要只查看根分区的挂载信息

使用 df 命令并通过管道符过滤

  • $符在文本前表示以文本开头:grep "$text"
  • $符在文本后表示以文本结尾:grep "text$"

相关命令

命令

说明

df -h | grep "d"

显示df命令输出的内容中包含 "d" 的行

df -h | grep "/$"

显示df命令输出的内容中以 " / " 结尾的行

df -h | grep "/$" | awk '{print $6}'

显示df命令输出的内容中以 " / " 结尾的行中的第6列

grep "root" /etc/passwd | grep "bash"

显示/etc/passwd文件内容以root开头bash结尾的行

变量

变量是用于存储数据值的名称

变量一般存放在内存中,所以当重启主机后,没有文件保存的变量会消失

取消变量

使用unset命令取消变量

命名规则

  • 变量名只能由字母、数字和下划线组成,但不能以数字开头(或纯数字)。
  • 变量名=值

变量赋值

复制name变量的值为zhangsan,并使用 echo $变量名 来输出变量的值

echo命令还可以连续输出变量

或使用大括号,区分变量的边界

将name变量的值赋值给NewName变量

引号

  • 如果声明字符串,并且字符串中带有空格的情况下,要加引号
  • 如果要声明数字,就不能加引号

如果使用双引号来定义变量,写在变量内带$符的字符串也会被识别为变量

如果使用单引号来定义,变量内带$符的字符串不会被识别为变量

并且两个引号是可以互相嵌套的,单引号和双引号可以互相嵌套,但是一种引号不能自己嵌套自己

反撇号 `

如果要在变量中加入命令,要用反撇号包起来

将反撇号内命令输出的结果作为开头 ls -l 命令的参数执行

使用$()嵌套命令

如果要输入嵌套多层的命令就要使用$()把内容包起来

查找并显示 useradd 命令所属的RPM包,并列出该RPM包中的所有配置文件路径

交互式变量声明

使用 read 命令交互声明name变量

加入 -p 选项 定义num变量的值为输入值

作用范围

局部变量

只会在当前解释器内生效的变量

当声明完一个变量后,默认为局部变量,只会在本Shell下生效,进入一个子bash环境会找不到该变量

因为这样声明的变量是局部变量,只针对本Shell解释器

全局变量

在每一个解释器内都生效的变量

使用export命令导出指定变量为全局变量

也可以在声明变量时直接设置为全局变量

永久保存变量

上面所声明的变量在reboot重启后就会消失

通过编辑 全局变量文件 来将变量写入到文件中

在文件末尾添加变量,保存并退出

使用 source 命令执行该文件 或 重启主机,就可以看到变量已经被声明了

数字变量操作

定义两个值为数字的变量,通过expr命令得出运算结果(expr只能计算整数

因为 *是同通配符,所以通过 \ 转义符 + * 来计算乘法运算

除法运算和取余运算

通过$()嵌套运算

变量查看

命令

说明

env

列出全局变量

set

列出当前Shell中的所有变量

特殊变量

编写一个脚本文件,编写内容如下

使用bash命令添加两个值来执行该脚本

由此可见,$1和$2的作用可以理解为占位符

$#

显示参数的数量

$*

执行该脚本,可以看到作用是显示添加的参数

$@

echo $@的作用是将所有位置参数作为单独的字符串显示,而不是像echo $* 变量整理为一整个字符串

echo $*

10 20 30

"$1 $2 $3"

echo $@

10 20 30

"$1" + "$2" + "$3"


$0

输出当前的脚本 绝对 / 相对路径

$!和$$

  • $!:上一个进程的进程号
  • $$:当前进程号

$?

检查上一个指令执行的结果状态

echo $?

如果状态正常就返回0

如果状态不正常就显示非0

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

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

相关文章

nodejs的await和async

例子 const fs require(fs).promises;async function getFileContent(filePath) {const content await fs.readFile(filePath, utf8); console.log(content); // 这行会在文件读取完成后执行 }getFileContent(example.txt); console.log(123); // 这行会立即执行输出结果&…

/usr/bin/ld: 当搜索用于 /lib/i386-linux-gnu/libcuda.so 时跳过不兼容的 -lcuda

/usr/bin/ld: 当搜索用于 /lib/i386-linux-gnu/libcuda.so 时跳过不兼容的 -lcuda ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/023dbdeb215b4b4580f7f54706e32af9.pn当使用unsloth做微调时,发现找不到libcuda,很自然想到需要软链接到最新…

2024最新AI大模型-LLm八股合集(八)-Transformer模型

更多2024最新AI大模型-LLm八股合集可以拉到文末!!! MHA & MQA & MGA (1)MHA 从多头注意力的结构图中,貌似这个所谓的多个头就是指多组线性变换层,其实并不是,只有使用了一…

PS去除logo背景

一、打开图片 二、点击通道选择色差最明显的通道 三、复制通道 四、点击载入 五、反选ctrlshifti(鼠标右键亦可,然后调整下范围) 六、点击图层,复制图层(ctrlJ) (先确保图层是解锁的&#xff0…

二叉树-输出二叉树的右视图

目录 一、问题描述 二、解题思路 三、代码实现 四、刷题链接 一、问题描述 二、解题思路 这里右视图类似于立方体的右视图,从右边看每一层第一个看到的结点的集合就是需要返回的结果,注意返回的结点是有相对顺序的,比如上面的1,3,5对应第…

[WTL/Win32]_[中级]_[MVP架构在实际项目中的应用]

场景 在开发Windows和macOS的界面软件时,Windows用的是WTL/Win32技术,而macOS用的是Cocoa技术。而两种技术的本地语言一个主打是C,另一个却是Object-c。界面软件的源码随着项目功能增多而增多,这就会给同步Windows和macOS的功能造成很大负担…

APM Profile 在系统可观测体系中的应用

引言 应用程序性能分析(Application Performance Management,APM)是一个广泛的概念,涉及应用程序运行时各种性能指标的监测、诊断和优化。在可观测体系建设中,APM 是保障系统业务运行性能的关键技术,确保用…

堆优化版Dijkstra求最短路-java

主要通过堆优化Dijkstra算法解决最短路,可以跟朴素版的Dijkstra算法进行对比。 文章目录 前言 一、Dijkstra求最短路 二、算法思路 1.邻接表存储图 2.用小根堆优化Dijkstra 三、代码如下 1.代码如下(示例): 2.读入数据 3.代码运行…

OpenGL绘制Bezier曲面

Bezier的定义 贝塞尔曲面是贝塞尔曲线在二维上的扩展。它由一组控制点定义,通过这些控制点生成光滑的曲面。贝塞尔曲面通常用两个参数 u u u和 v v v来表示,这两个参数的取值范围都在 [0, 1] 之间。 数学表示 P ( u , v ) = ∑ i = 0 n ∑ j = 0 m p i j ⋅ B i , n ( u ) ⋅…

基于ysoserial的深度利用研究(命令回显与内存马)

0x01 前言 很多小伙伴做反序列化漏洞的研究都是以命令执行为目标,本地测试最喜欢的就是弹计算器,但没有对反序列化漏洞进行深入研究,例如如何回显命令执行的结果,如何加载内存马。 遇到了一个实际环境中的反序列化漏洞&#xff…

text2vec 如何选择 chunksize 和 splitter?

0x00 导读 对 text2vec 来说,chunksize 选多大合适? 应该选择哪种 splitter ? BCE 还是 BGE ? 面对这些 RAG 问题,本文根据 text2vec 模型原理做假设,并用 HuixiangDou 真实数据验证,最终给出…

上海晋名室外危化品暂存柜助力国有控股高科技企业危化品安全储存

近日又有一台SAVEST室外危化品暂存柜项目成功验收交付使用,此次项目主要用于国有控股高科技企业油漆、固化剂及一些危废品的安全储存。 用户单位是一家国有控股、产权多元化的现代高科技企业。用户在日常工作运营中涉及到油漆、固化剂等危化品及一些危废品的室外安…

鄂州职业大学2024年成人高等继续教育招生简章

鄂州职业大学,作为一所享有盛誉的高等学府,一直以来都致力于为社会培养具备专业技能和良好素养的优秀人才。在成人高等继续教育领域,该校同样表现出色,为广大渴望继续深造、提升自身能力的成年人提供了宝贵的学习机会。 随着社会…

android关于源码编译简单的apk处理

文章目录 简述文件的添加 简述 创建AOSP源码可编译一个简单apk的过程,代码子目录结构图如下所示 文件的添加 1.com.custom.test目录下创建TestActivity.java文件 用于简单的界面显示类 package com.custom.test;import android.app.Activity; import android.o…

DY-110DP低电压继电器 25-124V 嵌入式安装 约瑟JOSEF

系列型号 DY-110电压继电器;GY-110电压继电器; GDY-110电压继电器;DY-110/AC电压继电器; GY-110/AC电压继电器;GDY-110/AC电压继电器; DL-110电压继电器;GL-110电压继电器; DL-…

【SD3的Turbo也来了】Jasper AI用Flash Diffusion的蒸馏技术为SD3提速

Flash Diffusion 是一种新颖的图像生成方法,旨在显著提高现有条件扩散模型(例如教师模型)的速度,而无需牺牲性能。它通过引入以下技术来实现这一点: 蒸馏损失:在教师模型和学生模型之间引入蒸馏损失&#…

深信服科技:2023网络钓鱼趋势分析报告

随着互联网的快速发展和广泛应用,网络钓鱼活动带来的安全隐患愈演愈烈。因应威胁发展,我 们编撰了此份分析报告,旨在全面了解其发展态势,并提醒相关部门、企业和公众加强防范。 在本报告中,我们将详细梳理网络钓鱼的近…

【Git】基础操作

初识Git 版本控制的方式: 集中式版本控制工具:版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代码,是必须联网才能工作,局域网或者互联网。个人修改之后要提交到中央版本库 例如:SVM和…

无忧易售新功能:集成图片库智能图片翻译,跨越语言障碍

在电商全球化的浪潮中,跨越语言的障碍,让产品图像说话,成为了商家致胜的关键。"无忧易售ERP"推出集成图片库与图片翻译功能的全新升级,为全球电商提供一站式解决方案,让商品跨越国界,沟通无界。 …

Gartner发布2024年人工智能技术成熟度曲线:29项决定人工智能领域发展方向的前沿和趋势性技术

人工智能投资已达到新高,重点是生成式人工智能,但在大多数情况下,该技术尚未实现预期的商业价值。这项研究通过分析各种人工智能创新(其中许多创新正在快速发展),帮助人工智能领导者确定其他值得投资的技术…