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

目录

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.mfbz.cn/a/726997.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

苹果入局AI手机 iOS 18将应用AI功能

当三星、华为等国内外手机厂商都在卷着造AI手机时,智能手机大佬苹果那边确一直没什么动静。直到今年5月,距离苹果 WWDC24 全球开发者大会还有十多天时,长期关注苹果的博社记者Mark Gurman放料,iOS 18系统中将会应用一些AI功能。 从…

JavaScript妙笔生花:打造沉浸式中国象棋游戏体验

前言 随着信息技术的飞速发展,Web开发领域也出现了翻天覆地的变化。JavaScript作为前端开发中不可或缺的编程语言,其重要性不言而喻。而当我们谈论到利用JavaScript打造一款沉浸式的中国象棋游戏体验时,我们不仅仅是在开发一个游戏&#xff0…

本地大模型服务 Ollama:从安装到使用

文章目录 前言一、下载安装1.1 官网安装1.2 压缩包安装1.3 docker 安装二、命令行使用2.1 常用命令2.2 模型列表2.3 使用三、Open-WebUI3.1 安装3.2 修改语言3.3 使用参考前言 Ollama 是专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计的开源框架,它有如下几个特点…

SAP_FICO模块-获利能力段新增特征字段

业务背景: 公司有启用获利能力分析功能,有一个销售订单接口,是通过第三方销售订单管理平台推送数据到SAP的,用户希望对接新增一个编号ID到销售订单上,并且可以用KE24/KE30报表查看显示; 对于我这么一个后勤…

Tailwindcss 扩展默认配置来自定义颜色

背景 项目里多个Tab标签都需要设置同样的背景颜色#F1F5FF,在集成tailwindcss之前就是重复该样式,如下图: .body {background-color: #f1f5ff; }集成tailwindcss时,我们希望在class中直接设置该背景色,但是默认的tai…

python如何做报表系统

首先我们安装的python和PyQt5要保持一致,要么都是32位或者都是64位。 下载安装,安装完成之后我们记得要设置环境变量。 一路选择“下一步”就可以了。 安装完成之后我们需要验证是否成功。 pyqt5的安装直接安装就可以的,主要更改环境变量~~\p…

Serverless如何赋能餐饮行业数字化?乐凯撒思变之道

导语 | 在数字化浪潮席卷全球的今天,每一个行业都在经历着前所未有的变革。餐饮行业作为人们日常生活中不可或缺的一部分,更是面临着巨大的转型压力。如何完成数字化转型,打破传统经营模式的限制,成为摆在众多餐饮商家面前的一道难…

RocketMQ快速入门:如何保证消息不丢失|保证消息可靠性(九)

0. 引言 在金融、电商等对数据完整性要求极高的行业,消息的丢失可能会导致数据不一致,严重影响业务逻辑和数据统计,也影响客户体验,所以在很多业务场景下,我们都要求数据不能丢失。而rocketmq中,如何对消息…

集合进阶(泛型、泛型通配符、数据结构(二叉树、平衡二叉树、红黑树

一、泛型类、泛型方法、泛型接口 1、泛型概述 泛型&#xff1a;是JDK5中引入的特性&#xff0c;可以在编译阶段约束操作的数据类型&#xff0c;并进行检查。泛型的格式&#xff1a;<数据类型>注意&#xff1a;泛型只能支持引用数据类型。 泛型的好处 1、统一数据类型。 …

建筑主体沉降观测规范详解

随着城市化进程的加速&#xff0c;高层建筑和大型建筑项目日益增多&#xff0c;建筑主体的沉降观测工作显得尤为重要。沉降观测是确保建筑安全稳定的关键环节&#xff0c;对于预防建筑安全事故、保障人民生命财产安全具有重要意义。本文将详细解析建筑主体沉降观测的规范和要求…

【机器学习】线性回归:从基础到实践的深度解析

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 线性回归&#xff1a;从基础到实践的深度解析引言一、线性回归基础1.1 定义与目…

Word和Excel如何快速对齐姓名

日常工作经常遇到整理参会人员名单时&#xff0c;有2字姓名、3字姓名&#xff0c;为保证文档美观&#xff0c;你是否还在一个一个空格在敲空格&#xff1f; 今天刘小生分享如何在Word和Excel中快速对齐姓名&#xff0c;快来练起来吧&#xff01; 1. Word姓名对齐 【第一步】…

看见未来社区:视频孪生技术打造智慧社区

智慧社区的建设需要创新的技术支撑。智汇云舟创新升级数字孪生为视频孪生技术&#xff0c;通过将真实世界的视频监控与数字模型实时融合&#xff0c;实现了对物理空间的实时实景动态模拟。 针对智慧社区管理业务&#xff0c;以智汇云舟视频孪生平台为支撑&#xff0c;综合承载…

一起笨笨的学C——014grep特别版

目录 前言 正文 原文&#xff1a; 要求总结&#xff1a; 一点一点来&#xff1a; grep学习&#xff1a; glob理解&#xff1a; dirent 目录函数&#xff1a; 加载日志文件&#xff1a; strstr与strcmp&#xff1a; 非首次尝试&#xff1a; 非二次 &#xff1a; 老师…

易兆微电子_嵌入式软件工程师笔试题

易先电子 嵌入式软件工程师笔试题(十七) 1.关键字 extern是什么含义, 请举例说明。 修饰符extern用在变量或者函数的声明前&#xff0c;用来说明 “ 此变量 / 函数是在别处定义的&#xff0c;要在此处引用 ”。 //main.c #include <stdio.h>int main() {extern int num…

英国牛津大学基因组学方向博士后职位

英国牛津大学基因组学方向博士后职位 牛津大学&#xff08;University of Oxford&#xff09;&#xff0c;简称“牛津”&#xff08;Oxford&#xff09;&#xff0c;位于英国牛津&#xff0c;是一所公立研究型大学&#xff0c;采用传统学院制。是罗素大学集团成员&#xff0c;被…

商超智能守护:AI监控技术在零售安全中的应用

结合思通数科大模型的图像处理、图像识别、目标检测和知识图谱技术&#xff0c;以下是详细的商超合规监测应用场景描述&#xff1a; 1. 员工仪容仪表监测&#xff1a; 利用图像识别技术&#xff0c;系统可以自动检测员工是否按照规范整理妆容、穿着工作服&#xff0c;以及是否…

管理咨询公司的五个招聘秘密

在管理咨询中&#xff0c;人是业务&#xff1b;客户支付数百万美元&#xff0c;要求管理顾问确认问题&#xff0c;并推荐解决方案。由于收入和合规性受到威胁&#xff0c;招聘错误的成本可能非常昂贵&#xff0c;一些公司更倾向于谨慎而不是效率。然而&#xff0c;在当今竞争激…

Nexus安卓木马分析报告

概述 2023年3月21日晚上&#xff0c;链安与中睿天下联合研发的监控系统检测到一种新型安卓木马。在经过睿士沙箱系统捕获样本之后&#xff0c;发现该安卓木马极有可能是原安卓网银盗号木马SOVA的变种。与此同时&#xff0c;意大利安全公司Cleafy发布了一篇题为《Nexus&#xf…

API接口对接的步骤流程?有哪些注意事项?

API接口对接自动化的实现方法&#xff1f;如何调试API接口发信&#xff1f; 在现代软件开发中&#xff0c;API接口对接已成为各个系统和应用之间进行通信和数据交换的关键技术。AokSend将详细介绍API接口对接的步骤流程&#xff0c;帮助开发者更好地理解和实现这一过程。 API…