小白到运维工程师自学之路 第四十一集 (shell脚本的基本使用)

news2024/11/23 23:52:58

一、概述

        Shell是一种命令行解释器,它是一种编程语言,用于在操作系统上执行命令和脚本。Shell语言是一种脚本语言,它可以用于自动化任务、批处理、系统管理和编写简单的程序。Shell语言通常用于Unix和Linux操作系统中,但也可以在其他操作系统中使用。常见的Shell语言包括Bash、Csh、Ksh、Zsh等。Shell语言的优点是易于学习和使用,可以快速编写简单的脚本,而且可以与其他系统命令和工具集成使用。

二、常用符号

1、空格:用于分隔命令和参数

2、百分号%:表示在字符串中匹配模式

3、双引号"":用于保留字符串中的空格和特殊字符的含义

4、单引号'':用于保留字符串中的所有字符的字面含义

5、反斜杠\:用于转义特殊字符,使其失去特殊含义

6、管道符 | :用于将一个命令的输出作为另一个命令的输入

7、大于号、小于号<  <<  >> >:用于将命令的输入或输出重定向到文件或设备

8、*乘号:代表所有

9、问号? 中括号[]:用于匹配文件名或路径名中的多个字符

10、分号; :用于分割多个命令

11、& :用于将命令放入后台运行

12、井号#:注释一行命令

13、感叹号!:是逻辑非运算符,表示取反。它可以用于条件语句、循环语句、命令行参数等多种情况中,用于判断某个条件是否不成立

14、双括号(( )) :用来进行计算、运算

三、选项(目前只学明白了两个常用的)

1、-f :条件测试符号,用于测试文件是否存在且为普通文件如果是普通文件则返回1 如果不是普通文件则返回0

2、-s :表示在脚本中使用参数时,后面的参数将被视为标准输入

3、还有一个英文缩写tr:tr是一个用于转换或删除字符的命令

三、$的用法

1、变量引用:$后面跟着变量名,表示引用该变量的值。例如,$HOME表示当前用户的home目录。

2、命令替换:$()或``符号包裹的命令,表示执行该命令并将输出结果作为字符串返回。例如,$(date +%Y-%m-%d)表示执行date命令并返回当前日期。

3、环境变量:$后面跟着环境变量名,表示引用该环境变量的值。例如,$PATH表示系统的环境变量PATH的值

4、特殊变量:$后面跟着特殊变量名,表示引用该特殊变量的值。例如,$$表示当前进程的PID

5、正则表达式:$后面跟着正则表达式,表示匹配以该正则表达式结尾的字符串。例如,*.txt表示匹配以.txt结尾的文件名

四、编写简单的脚本(写完脚本后需要给脚本可执行权限,脚本的后缀为.sh)

1、将当前目录下所有大写文件名替换为小写文件名的脚本


#!/bin/bash                    
for file in *
do
    if [ -f "$file" ]; then
        lowercase=$(echo "$file"  | tr '[:upper:]' '[:lower:]')    
      
	if [ "$file" != "$lowercase" ]; then    
            mv "$file" "$lowercase"	 	
        fi
    fi
done




#!/bin/bash         告诉系统这是一个脚本
使用for循环  file 表示文件   * 表示所有文件
使用if语句 [-f "$file"] 表示如果这个文件是一个普通文件则进行下一步
lowercase是小写的意思 $(echo "$file" | tr '[:upper:]' '[:lower:]') 表示使用echo输出文件名使用|进行二次处理 tr表示转换  upper表示大写  lower表示小写 表示如果文件名是大写的话就转换为小写
使用第二个if语句["$file" != "$lowercase"] !表示取反 表示如果文件不是小写就执行下一条
这里使用mv命令进行改名 mv"$file" "$lowercase" 表示将文件名修改为小写的文件名
done表示结束这个循环

 进行脚本测试

 

可以看到执行完成后目录中名称为大写的文件名称全部变成了小写

 

2、统计当前目录下所有文件一共有几行的脚本

#!/bin/bash
total_lines=0                                                
for file in *
do
    if [ -f "$file" ]; then        
        lines=$(wc -l < "$file")   
        total_lines=$((total_lines + lines))  
    fi
done
echo "Total lines: $total_lines"  


定义变量total_lines=0  全部的行等于0
使用for循环 类型是文件 所有文件
测试文件是否为普通文件 "$file"表示文件名
将文件“$file”的行数重定向道wc -l 命令中 得到的结果通过$返回给lines
总行数等于total_lines+lines得到的结果使用$返回给total_lines   (()):表示计算
echo输出总行数   $调用total_lines的数值

进行脚本测试

可以看到etc中的文件一共有14961行

 

 

以上就是shell脚本的基本使用(语言这个东西需要慢慢钻研)

如有错误欢迎各位大佬批评指正,我们共同进步

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

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

相关文章

MySQL优化--索引创建原则,索引什么时候会失效

目录 索引创建原则 面试回答 索引什么时候会失效 面试回答 索引创建原则 1). 针对于数据量较大&#xff0c;且查询比较频繁的表建立索引。 2). 针对于常作为查询条件&#xff08;where&#xff09;、排序&#xff08;order by&#xff09;、分组&#xff08;group by&…

链路追踪SkyWalking整合项目以及数据持久化

1. 微服务整合SkyWalking 1.1 通过jar包方式整合 首先我们将一个简单的springboot服务打成jar包。 将其上传到Linux服务器中。 准备一个启动脚本&#xff0c;脚本内容如下&#xff1a; #!/bin/sh # SkyWalking Agent配置 export SW_AGENT_NAMEskywalking‐test #Agent名字,一…

QVariant类api及相关用法

目录 1、QVariant对象概述 2、QVariant对象的使用 3.使用QVariant对QT中标准数据类型进行处理 4.使用QVariant对QT中自定义数据类型进行处理 setValue fromValue canConvert 1、QVariant对象概述 在Qt中&#xff0c;QVariant是一个通用的值容器&#xff0c;它可…

【kubernetes】Docker与获取转证书工具安装、kubernetes软件安装

前言:二进制部署kubernetes集群在企业应用中扮演着非常重要的角色。无论是集群升级,还是证书设置有效期都非常方便,也是从事云原生相关工作从入门到精通不得不迈过的坎。通过本系列文章,你将从虚拟机准备开始,到使用二进制方式从零到一搭建起安全稳定的高可用kubernetes集…

没有“中间商赚差价”, OpenVINO™ 直接支持 PyTorch 模型对象

点击蓝字 关注我们,让开发变得更有趣 作者 | 杨亦诚 排版 | 李擎 没有“中间商赚差价”&#xff0c; OpenVINO™ 直接支持 PyTorch 模型对象 背景 作为最热门的开源深度学习框架之一&#xff0c;PyTorch 的易用性和灵活性使其深受学术和研究界的喜爱。之前 OpenVINO™ 对于 Py…

人脸检测——基于机器学习2】Haar特性

1.什么是Haar特征 Haar特征是一种反映人脸灰度差异的矩形特征,因其与Haar小波类似而得名。 2.什么是Haar小波 Haar小波: 定义 其波形图为 由图2.1可以看出,Haar小波可以看作二值 分类问题,如同Haar矩阵特征非黑即白,故Haar矩阵特征又称为类Haar特征。 3.Haar特征 H…

React项目引入Arco Design,以及Arco Design Pro 架构

创建项目 创建 react-arco 项目 pnpm create vite my-vue-app --template react安装 arco-design/web-react 安装 react 版的 arco-design 基础使用 添加一个按钮&#xff0c;App.tsx import "./App.css"; import { Button } from "arco-design/web-react…

基本类型与包装类型区别

知识点概括&#xff1a; 简介&#xff1a; Java有八种基本类型&#xff0c;byte&#xff0c; short&#xff0c; int&#xff0c; long&#xff0c; float&#xff0c; double&#xff0c; char&#xff0c; boolean。 对应八种包装类&#xff0c;Byte&#xff0c; Short&…

【Python架构】在 Python 中使用架构模式管理复杂性

你的源代码是不是感觉像一个大泥球&#xff1f;依赖项是否在您的代码库中交织在一起&#xff0c;以至于改变感觉很危险或不可能&#xff1f; 随着业务的增长和领域模型&#xff08;您在应用程序中解决的业务问题&#xff09;变得更加复杂&#xff0c;我们如何在不从头开始重新编…

Android初体验

文章目录 前言一、安卓架构1.1 安卓架构1.2 信息安全1.3 兼容性测试 二、使用WSL编译安卓低版本&#xff08;10&#xff09;总结 前言 Android 是一个适用于移动设备的开源操作系统&#xff0c;也是由 Google 主导的对应开源项目。 最初&#xff0c;Android只在移动设备中流行…

快码住! 帮你巧妙记忆C语言运算符的优先级顺序!

文章目录 C语言中的运算符C语言中运算符的优先级巧妙记忆运算符优先级的方法因不明确优先级而造成的常见问题 C语言中的运算符 C语言中的运算符说多也多&#xff0c;说不多也不多&#xff0c;包括以下运算符&#xff1a; C语言中运算符的优先级 C语言运算符优先级表&#xff…

Springboot--关于自定义stater的yml无法提示

1.前言 在以前在搭建架构的时候就碰到了类似的情况&#xff0c;在使用EnableConfigurationProperties注解的时候&#xff0c;不管怎样&#xff0c;在项目中引入了该starter的情况下依然不发自动的提示properties里面的属性。 Data ConfigurationProperties(prefix "pro…

python selenium2/webdriver自动化测试系列教程!?

以下是 Python Selenium2/WebDriver 自动化测试系列教程&#xff0c;希望能对您有所帮助&#xff1a; 1、安装 Selenium WebDriver 在安装 Python 的基础上&#xff0c;请使用 pip 命令安装 Selenium WebDriver&#xff1a; pip install selenium 2、配置浏览器驱动程序 S…

UDP编程

前置知识 #include <sys/types.h> #include <sys/socket.h> ssize_t send(int sockfd, const void *buf, size_t len, int flags);sockfd&#xff1a;表示要发送数据的套接字描述符。它是由socket函数创建的套接字返回的文件描述符。 buf&#xff1a;是一个指向要…

高级SQL语句

高级SQL语句 建立实验环境高级语句1.---- SELECT ----显示表格中一个或数个字段的所有数据记录2.---- DISTINCT ----不显示重复的数据记录3.---- WHERE ----有条件查询4.---- AND OR ----且 或 &#xff08;一般配合where使用&#xff09;5.---- IN ----显示已知的值的数据记录…

【人工智能技术专题】「入门到精通系列教程」零基础带你掌握人工智能全流程技术体系和实战指南(人工智能理论知识概论)

零基础带你掌握人工智能全流程技术体系和实战指南 前言专栏介绍专栏说明学习大纲前提条件面向读者学习目标人工智能背景介绍概念说明定义 目标方向目标人工智能的主要目标人工智能的应用领域 人工智能学科领域人工智能分类基于应用的人工智能弱AI&#xff08;弱人工智能&#x…

【干货】Android系统定制基础篇:第二部分(Launcher3支持键盘切换焦点、开发者模式密码确认、禁止非预装应用安装、配置时间)

1、Android Launcher3支持键盘切换焦点 Android Launcher3 默认并不支持键盘操作&#xff0c;无法切换焦点&#xff0c;在一些需要支持键盘或遥控操作的设备中无法使用&#xff0c;因些对 Launcher3 做简单修改&#xff0c;使其支持键盘切换焦点。 diff --git a/packages/app…

在字节跳动做了5年软件测试,无情被辞,想给划水的兄弟提个醒

先简单交代一下背景吧&#xff0c;某不知名 985 的本硕&#xff0c;17 年毕业加入字节&#xff0c;以“人员优化”的名义无情被裁员&#xff0c;之后跳槽到了有赞&#xff0c;一直从事软件测试的工作。之前没有实习经历&#xff0c;算是5年的工作经验吧。 这5年之间完成了一次…

JS-快速入门

目录 变量原生数据类型模板字符串字符串的内置属性、方法数组数组创建方式数组值操作获取值添加值删除值判断是否是数组获取值的索引 对象创建对象&#xff0c;为对象创建新属性对象值存到同名常(变)量中 对象数组和JSON创建对象数组对象数组取值对象数组转JSON数据 if条件语句…

ELK技术堆栈(yum安装部署)

ELK技术堆栈&#xff08;yum安装部署&#xff09; 目录 ELK技术堆栈可以应用于各种场景 ELK的工作原理如下&#xff1a; 它由三个核心组件组成&#xff1a; 部署步骤&#xff1a;&#xff08;单台部署&#xff09; 环境部署&#xff1a; 安装JAVA环境&#xff1a;&#…