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.mzph.cn/diannao/30925.shtml

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

相关文章

代码讲解——ssm+jsp+maven项目目录结构说明

1 applicationContext.xml 应用上下文配置 2 db.properties 数据库配置 3 log4j.properties日志配置 4 mybatis-config.xml mybatis配置 5 springmvc.xml springmvc配置

万元主力机型该选什么固态硬盘,佰维NV7200、NV3500 的实用一定要让你知道

固态硬盘:变革存储技术,探索无尽可能 今年的固态市场价格一直是稳中上涨。 固态的价格上涨有技术上的因素,也有人工成本上的因素。好在国产固态技术的崛起,在固态价格上涨之下,依旧能选购到性价比和性能出众的型号。…

Elasticsearch搜索引擎(初级篇)

1.1 初识ElasticSearch | 《ElasticSearch入门到实战》电子书 (chaosopen.cn) 目录 第一章 入门 1.1 ElasticSearch需求背景 1.2 ElasticSearch 和关系型数据库的对比 1.3 基础概念 文档和字段 索引和映射 第二章 索引操作 2.0 Mapping映射属性 2.1 创建索引 DS…

【SEMI-e ·国际半导体深圳展】| 06月26-28日唯创知音语音芯片供应商 邀您来观展

世界聚焦半导体,产业规模空前!一场高端产业研学盛会即将如约而至。 SEMI-e 第六届2024国际半导体展深圳站,2024年06月26-28日将在深圳国际会展中心(宝安)开展,展会展出面积60000平方米,汇聚全国…

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

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

【C语言】12.指针与数组的关系

一、数组名的理解 #include <stdio.h> int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };printf("&arr[0] %p\n", &arr[0]);printf("arr %p\n", arr);return 0; }通过上述代码输出结果我们发现结果相同&#xff0c;因此我们得出结论&a…

李宏毅深度学习03——神经网络训练不起来怎么办

视频链接 如果Optimization失败的时候&#xff0c;怎么把梯度下降做的更好&#xff1f; 只考虑这种情况&#xff0c;不考虑overfitting 局部最小值&#xff08;local minima&#xff09;和鞍点&#xff08;saddle point&#xff09; 为什么Optimization会失败&#xff1f; …

南京邮电大学计算机网络实验一(网络操作系统的安装与配置)

文章目录 一、 实验目的和要求二、 实验环境(实验设备)三、 实验原理和步骤四、 实验小结&#xff08;包括问题和解决方法、心得体会、意见与建议等&#xff09;&#xff08;一&#xff09;问题和解决方法&#xff08;二&#xff09;心得体会&#xff08;三&#xff09;意见与建…

爬山算法优点

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

【stm32单片机应用】基于I2C协议的OLED显示(利用U82G库)

一、U8g2库 &#xff08;一&#xff09;U8g2简介 U8g2 是一个用于单色和彩色显示的嵌入式图形库&#xff0c;特别适用于单色OLED、LCD显示屏的驱动。它是对早期U8g库的扩展和改进&#xff0c;提供了更多功能和更广泛的硬件支持。U8g2作为一款强大而灵活的嵌入式图形库&#x…

JAVA语言开发的一套(智慧工地监管系统源码)让工地变得更加“聪明”

JAVA语言开发的一套&#xff08;智慧工地监管系统源码&#xff09;让工地变得更加“聪明” 数字智慧工地是指利用物联网、大数据、云计算、人工智能等先进技术&#xff0c;对工地进行全面数字化改造和智能化升级&#xff0c;实现工地管理的精细化、高效化和智能化。它通过实时…

Windows上PyTorch3D安装踩坑记录

直入正题&#xff0c;打开命令行&#xff0c;直接通过 pip 安装 PyTorch3D : (python11) F:\study\2021-07\python>pip install pytorch3d Looking in indexes: http://mirrors.aliyun.com/pypi/simple/ ERROR: Could not find a version that satisfies the requirement p…

聚焦AIoT最后一公里:EasyCVR+AI视频技术在各领域的创新应用

随着5G、AI、边缘计算、物联网&#xff08;IoT&#xff09;、云计算等技术的快速发展&#xff0c;万物互联已经从概念逐渐转变为现实&#xff0c;全新的行业生态AIoT正在开启新时代。巨大的市场潜力与AI等新兴技术不断融合形成的庞大市场缺口&#xff0c;深度场景化应用落地诉求…

生产环境OpenLDAP主从集群

1、背景 在很多组织中&#xff0c;需要对用户和系统进行统一的身份认证和授权管理。为了实现这一目标&#xff0c;通常会使用LDAP&#xff08;轻量级目录访问协议&#xff09;来构建集中化的身份认证和授权服务。而在生产环境中&#xff0c;为了保证高可用性和可扩展性&#x…

Ubuntu server 24 (Linux) 安装lua + 卸载软件

1 apt 安装 # sudo apt update #查看可安装的lua版本 sudo apt-get install luaversion # sudo apt-get install lua5.3 #查看版本 testiZbp1g7fmjea77vsqc5hmmZ:/data/soft$ lua -v Lua 5.3.6 Copyright (C) 1994-2020 Lua.org, PUC-Rio2 Ubuntu卸载软件 #查找lua已安装…

python安装包中的.dist-info作用

在使用pip install 包名 进行python第三方库的时候&#xff0c;安装完库之后通常会出现一个库名&#xff0c;还有一个.dist-info的文件&#xff0c;以安装yolov8所依赖的框架ultralytics为例&#xff0c;成功安装后会出现以下文件夹&#xff1a; 第一个ultralytics是概该框架包…

【Android】构建 Android Automotive OS:适合初学者的指南

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

深入探究RTOS的IPC机制----邮箱

阅读引言&#xff1a; 因为将来工作需要&#xff0c; 最近在深入学习OS的内部机制&#xff0c;我把我觉得重要的、核心的东西分享出来&#xff0c; 希望对有需要的人有所帮助&#xff0c; 阅读此文需要读友有RTOS基础&#xff0c; 以及一些操作系统的基础知识&#xff0c; 学习…

行列式和矩阵的区别

目录 一、行列式 1. 行列式的定义 2. (全)排列 3. 逆序数 二、矩阵 1. 矩阵的定义 三、行列式和矩阵的区别 四、参考书目 一、行列式 1. 行列式的定义 2. (全)排列 3. 逆序数 二、矩阵 1. 矩阵的定义 三、行列式和矩阵的区别 四、参考书目 同济大学数学系. 工程数学…

Dynamics 365 on-premise 隐藏高级查找导出按钮

提示 着急可以直接看结果代码部分 背景 Dynamics 365 on-premise中有个高级查找的功能,查询的结果支持导出,如下图 业务反馈这个有数据安全风险,要修改显示规则。 一开始想着能用RibbonWorkbench改,就很爽快得答应了业务。结果用RibbonWorkbench改不了。 反复尝试 既…