【Shell学习】

news2024/11/27 12:34:33

Shell学习

Shell介绍

  Shell是一种用于操作系统的命令行解释器,它提供了与操作系统内核进行交互的接口。它允许用户通过键入命令来执行各种操作,包括文件管理、进程控制、网络通信等。
  下面是一些关于Shell的介绍:

  1. Shell是一种解释性语言:Shell脚本是一系列用Shell编写的命令组成的脚本文件,它们按顺序逐行执行。Shell解释器会解析并执行这些命令,从而实现相应的功能。
  2. 常见的Shell解释器:常见的Shell解释器包括Bourne Shell(sh)、Bourne Again Shell(bash)、C Shell(csh)、Korn Shell(ksh)等。它们在不同的操作系统上有不同的默认解释器。
  3. 文件管理:Shell提供了丰富的命令用于文件和目录的管理,如创建复制移动删除文件和目录,以及查看文件内容修改权限等。
  4. 环境变量和参数:Shell允许用户定义和使用环境变量,这些变量可以存储配置信息或者在不同的脚本之间传递数据。同时,Shell还可以接受命令行参数,并在脚本中使用这些参数。
  5. 流程控制:Shell支持条件判断和循环结构,使得脚本可以根据不同的条件执行不同的操作或者重复执行某些操作。
  6. 管道和重定向:Shell支持使用管道(|)将多个命令连接在一起,使得一个命令的输出可以作为另一个命令的输入。此外,Shell还支持重定向符号(>、>>、<等),用于将命令的输入输出重定向到文件或其他设备。
  7. 脚本编程:Shell脚本可以用于编写复杂的自动化任务,通过编写脚本,可以将一系列命令和操作组织起来,实现特定的功能。

  总的来说,Shell是一种强大的命令行解释器,它为用户提供了一种方便的方式来与操作系统进行交互和控制。无论是日常的系统管理任务还是自动化脚本编写,Shell都是一个重要的工具。

Shell的优势和好处

  1. 灵活性和可定制性:Shell脚本提供了灵活性和可定制性,使得用户可以编写自己的脚本来满足特定的需求。用户可以根据需要编写脚本,执行一系列命令和操作,实现定制化的功能。
  2. 自动化和批处理:Shell脚本可以用于自动化和批处理任务。通过编写脚本,可以将一系列操作组织起来,自动执行,减少了手动操作的工作量,提高了效率。
  3. 快速脚本编写和执行:Shell脚本的语法相对简单,易于学习和使用。脚本可以很快编写并执行,不需要编译和链接过程,提供了快速的开发和测试环境。
  4. 强大的命令行工具:Shell提供了大量的命令行工具,用于文件管理、进程控制、网络通信等。这些工具可以通过脚本来自动化执行,提供了很大的便利性和功能扩展性。
  5. 跨平台支持:Shell脚本在多个操作系统上都可以运行,例如Unix、Linux和MacOS等。这种跨平台支持使得脚本可以在不同的环境中使用和迁移,提高了可移植性。
  6. 资源利用和性能优化:Shell脚本可以通过合理的编写和优化,充分利用系统资源,提高系统的性能和效率。例如,通过合理使用并发和并行处理,可以加快任务执行速度。
  7. 交互和调试能力:Shell脚本提供了交互式的命令行环境,允许用户实时交互并执行命令。同时,Shell脚本还提供了调试功能,可以方便地跟踪和调试脚本中的错误。

Shell的小案例

1. helloworld练习

  1. 在命令行下输入cd进入自己的目录;
  2. 执行命令:vi ./helloworld.sh进入vi编辑文本;
  3. 输入i切换到vi插入模式;
  4. 键入两行代码:
#!/bin/bash
echo "Hello world"
  1. 按ESC切换到vi普通模式后输入:wq保存退出;
  2. 输入chmod +x ./helloworld.sh设置可执行权限;
  3. ./helloworld.sh执行脚本

结果如下:
在这里插入图片描述

注释:#!/bin/bash 是一个特殊的注释,称为"shebang"或"hashbang"。它出现在Shell脚本文件的第一行,用于指定要执行该脚本的解释器。

2. demo.sh练习

再来看一个脚本

#!/bin/bash

a="1234"

func1(){
    echo "func1 output"
    return 3
}

if ! func1; then
        echo "abcd $0 $1 ${a} 4567 $(func1)"
fi

运行脚本输出:
在这里插入图片描述
解释如下:

  1. #!/bin/bash:这是一个shebang,指定了脚本要使用的解释器,这里是Bash。
  2. a=“1234”:定义了一个名为a的变量,赋值为字符串"1234"。
  3. func1(){…}:定义了一个名为func1的函数。函数内部的代码会在函数被调用时执行。
  4. echo “func1 output”:函数func1中的第一行代码,用于在终端输出字符串"func1 output"。
  5. return 3:函数func1中的第二行代码,将函数的返回值设置为3。
  6. if ! func1; then … fi:这是一个条件语句,检查函数func1的返回值。!表示逻辑取反,所以! func1表示当函数func1返回非零值(即失败)时执行下面的代码。
  7. echo “abcd $0 $1 ${a} 4567 $(func1)”:如果函数func1返回非零值,就会执行这行代码。它会在终端输出一个字符串,其中包含了一些变量和函数的值:
       ·$0:表示脚本的名称(demo.sh)。
       ·$1:表示脚本执行时传入的第一个参数。
       ·${a}:表示变量a的值(1234)。
       · $(func1):表示调用函数func1并获取其返回值(3)。
    综上所述,这个脚本的含义是:调用函数func1,如果函数返回非零值(即失败),则在终端输出一个包含了脚本名称、第一个参数、变量a的值和函数func1的返回值的字符串。

支持工具

awk

  awk是一种强大的文本处理工具,它可以用于提取转换操作结构化文本数据。awk读取输入文件逐行进行处理,并可以根据用户指定的模式和操作来筛选和处理数据。
  以下是awk的一些常见用法和功能:

  1. 打印文本:最简单的awk用法是打印输入文件的内容。默认情况下,它会打印每一行的所有字段。例如,awk ‘{print}’ file.txt会打印文件"file.txt"的所有行。
  2. 模式匹配和过滤awk可以根据用户指定的模式来匹配和过滤行。例如,awk ‘/pattern/’ file.txt会打印文件"file.txt"中包含"pattern"的行。
  3. 字段处理awk以空格或制表符为默认字段分隔符,可以对每个字段进行操作。通过$符号和字段号,可以访问和处理特定字段的值。例如,awk ‘{print $1}’ file.txt会打印文件"file.txt"的每一行的第一个字段。
  4. 条件判断和操作awk支持条件语句和操作符,可以根据条件执行特定的操作。例如,awk ‘$3 > 10 {print $1, $2}’ file.txt会打印文件"file.txt"中第三个字段大于10的行的第一个和第二个字段。
  5. 自定义分隔符:可以使用-F选项指定自定义的字段分隔符。例如,awk -F’,’ ‘{print $1}’ file.csv会将逗号作为字段分隔符,打印文件"file.csv"的每一行的第一个字段。
  6. 数组和循环:awk支持数组和循环结构,可以用于统计、聚合和处理数据。通过在awk中定义和使用数组,可以对数据进行更复杂的操作。
  7. 内置函数:awk提供了许多内置函数,如字符串处理、数学运算、日期时间处理等。可以使用这些函数对字段和变量进行操作和计算。
      需要注意的是,awk是一种功能强大而灵活的工具,可以处理大规模的文本数据。在使用awk,请参考其详细的文档和语法规则,以充分利用其功能和选项。

示例:

#!/bin/bash

# 使用awk打印文件的所有行
1. awk '{print}' file.txt
# 使用awk根据模式过滤行
2. awk '/name/' file.txt
# 使用awk打印指定字段
3. awk '{print $1}' file.txt
# 使用awk根据条件打印特定字段
4. awk '$3 > 10 {print $1, $2}' file.txt
# 使用awk自定义字段分隔符
# 对于名为"file.txt"的文件的每一行,使用逗号作为字段分隔符,提取并打印出每一行的第一个字段。
5. awk -F',' '{print $1}' file.txt

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

grep

  grep是一个常用的命令行工具,用于在文本文件中搜索指定的模式(pattern)。它的主要功能是根据给定的模式过滤文本,并输出匹配到的行。
  grep的基本用法是:

grep [options] pattern [file...]

  其中:

  • pattern’是要搜索的模式,可以是一个普通字符串或正则表达式。
  • file…’是一个或多个要搜索的文件。如果不指定文件名,则默认从标准输入读取文本。
  • grep’会扫描每一行文本,并将匹配到模式的行输出到标准输出。

一些常用的grep选项包括:

  • -i:忽略大小写进行匹配。
  • -v:反向匹配,只输出不匹配模式的行。
  • -r:递归地搜索目录中的文件。
  • -n:显示匹配行的行号。
  • -l:只输出包含匹配模式的文件名。

  除了基本的文本搜索,grep还支持其他更高级的用法,如使用正则表达式进行复杂的模式匹配,以及使用管道结合其他命令进行文本处理。

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

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

相关文章

使用php数组实现双色球的随机选号

一、双色球彩票介绍 双色球是中国福利彩票的一种常见玩法&#xff0c;也是全国彩民最爱的彩种之一。玩法规则是在33个红色球中选择6个数字&#xff0c;在16个蓝色球中选择1个数字&#xff0c;红色球号码区间为1-33&#xff0c;蓝色球号码区间为1-16。可以单式投注或者复式投注…

【数据结构】初识

&#x1f341; 博客主页:江池俊的博客_CSDN博客-C语言——探索高效编程的基石领域博主 &#x1f341; 专栏&#xff1a;https://blog.csdn.net/2201_75743654/category_12348274.html &#x1f341; 如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏&#x1f…

在UI中使用SpriteMask裁减任意shader的粒子效果

前言 由于我们需要在Mask中对粒子效果进行裁减。但是我们的的特效同事不愿意每个shader都去添加Stencil。所以使用SpriteMask方式进行裁减。 使用步骤 1. 添加SpriteMask Component 更具你需要的Mask形状设置精灵图片。又因为实际是精灵&#xff0c;并不属于UI系统&#xff…

什么是 XSS 攻击,攻击原理是什么

什么是 XSS 攻击&#xff1f; XSS&#xff08;Cross-Site Scripting&#xff09;攻击是一种常见的 Web 安全漏洞&#xff0c;其攻击目标是 Web 应用程序中的用户&#xff0c;攻击者通过在 Web 页面中植入恶意脚本&#xff0c;从而实现窃取用户敏感信息、篡改用户数据等目的。 …

水母搜索(JS)算法(含MATLAB代码)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

zeppelin的hive使用

zeppelin的hive使用 配置项 default.driver org.apache.hive.jdbc.HiveDriver default.url jdbc:hive2://192.168.xxx.xxx:10000 default.user hiveHive使用&#xff1a;点击create new note Default Interpreter选择hive

苹果iOS App Store上架操作流程详解:从开发者账号到应用发布

很多开发者在开发完iOS APP、进行内测后&#xff0c;下一步就面临上架App Store&#xff0c;不过也有很多同学对APP上架App Store的流程不太了解&#xff0c;下面我们来说一下iOS APP上架App Store的具体流程&#xff0c;如有未涉及到的部分&#xff0c;大家可以及时咨询&#…

代码随想录算法训练营day2 | 977. 有序数组的平方,209. 长度最小的子数组

目录 977. 有序数组的平方 209. 长度最小的子数组 59. 螺旋矩阵 II 977. 有序数组的平方 977. 有序数组的平方 难度&#xff1a;easy 类型&#xff1a;双指针&#xff08;相向指针&#xff09; 思路&#xff1a; 暴力法是将每个数都平方后&#xff0c;再排序(快排)&#…

MySQL 多表查询练习

1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) );创建score表。SQL代码如下&#xff1a; CREATE TABLE s…

万字长文 | Hadoop 上云: 存算分离架构设计与迁移实践

一面数据原有的技术架构是在线下机房中使用 CDH 构建的大数据集群。自公司成立以来&#xff0c;每年都保持着高速增长&#xff0c;业务的增长带来了数据量的剧增。 在过去几年中&#xff0c;我们按照每 1 到 2 年的规划扩容硬件&#xff0c;但往往在半年之后就不得不再次扩容。…

KMP算法和朴素算法对比

1.KMP速求next数组 先记录做题过程 等有时间再填内容吧

6、i2c设备驱动

I2C设备驱动要使用i2c_driver和i2c_client数据结构并填充i2c_driver中的成员函数。 i2c_client一般被包 含在设备的私有信息结构体yyy_data中&#xff0c; 而i2c_driver则适合被定义为全局变量并初始化 static struct i2c_driver pca954x_driver { .driver {…

组件的插槽以及组件通信

组件的插槽以及组件通信 1. 插槽1.1. 单个插槽1.2. 多个插槽 2. 组件通信2.1. 属性绑定2.2. 事件绑定&#xff08;重点&#xff09;2.3. 获取组件实例 1. 插槽 在自定义组件的 wxml 结构中&#xff0c;可以提供一个 节点&#xff08;插槽&#xff09;&#xff0c;用于承载组件…

2023WAIC大会后记:我们距离AGI还有多远?

只有解决了算力问题&#xff0c;才能离大模型的商业化之路更进一步&#xff0c;等等问题&#xff0c;都在成为当下限制我们想象力的关键因素。继2023世界人工智能大会后&#xff0c;大模型还有多少想象力&#xff1f; 作者|思杭 编辑|皮爷 出品|产业家 1亿用户&#xff0…

当用AopContext.currentProxy()方式调用@Asyn注解的方法,发现不起作用了

1、前言 遇到到平常一些spring相关调用错误浅浅记录下 2、我们常常会用到在一个类的方法内部会去调用本类的别一个方法 我们常常会用到在一个类的方法内部会去调用本类的别一个方法&#xff0c;示例如下&#xff1a; public interface ITestAsy {String funttion1();String…

pycharm新建分支并提送至GitHub

文章目录 前言pycharm创建本地分支Push至远程分支 前言 当我们写的项目代码越来越多时&#xff0c;一个master分支无法满足需求了&#xff0c;这个时候就需要创建分支来管理代码。 创建分支可以快速的回滚到某个节点的版本&#xff0c;也可以多个开发者同时开发一个项目&#…

css:横向滚动布局

效果&#xff1a; 实现代码&#xff1a; <template><div class"index_div"><div class"container"><div class"flexBox"><div class"flex_item" v-for"item in topMenu" :key"item.id&quo…

五种不同自动化测试模型的基本介绍

随着移动互联网的发展&#xff0c;软件研发模型逐步完善&#xff0c;软件交付质量越来越受到软件公司的重视&#xff0c;软件测试技术特别是自动化测试技术开始在软件系统研发过程中发挥着越来越重要的作用。 与传统的手工测试技术相比&#xff0c;自动化测试具备了良好的可操…

模拟实现浏览器自带的 ctrl+f 搜索功能

主要利用的就是元素的innerHtml&#xff0c;通过replace方法&#xff0c;把文本替换为带标签的文本&#xff0c;然后就有样式了 下图贴出 主要代码及效果 <template><div class"search-page"><el-input style"width: 200px" v-model"…

2023年信号处理与机器学习国际研讨会(WSPML 2023)| SPIE独立出版 快速稳定

会议简介 Brief Introduction 2023年信号处理与机器学习国际研讨会(WSPML 2023) 会议时间&#xff1a;2023年9月22 -24日 召开地点&#xff1a;中国杭州 大会官网&#xff1a;www.wspml.org 2023年信号处理与机器学习国际研讨会(WSPML 2023) 由西安交通大学、重庆大学光电技术及…