鸟哥Linux私房菜笔记(三)

鸟哥Linux私房菜笔记(三)

该第三部分和第四部分主要为原书的第十一章(正则表达式与文件格式化处理),第十二章学习shell脚本,第十六章(进程管理与SElinux初探部分),第十七章(认识系统服务),第十九章(启动流程,模块管理与Loader),第二十一章(软件安装:源代码与Tarball).

第十一章正则表达式与文件格式化处理

正则表达式

正则表达式是通过一些特殊字符的排列来查找,删除,替换一行文字或者多行文字,简单来说,正则表达式就是用在字符串的处理的一项表达式。正则表达式不是一个工具程序,而是一个字符串处理的标准程序。正则表达式与通配符是完全不同的,通配符代表的是一个bash的功能。

以下是部分linux正则表达式的示例:(grep的高级用法)

在这里我新建了个txt文件,内容只有五行,然后分别让命令行grep出含有'name'的行,含有'[a-z]'(从a到z任意字母)的行,含有[ll]的行,结果如输出所示。

这就告诉我们在实际操作的时候假如不用Vim该怎么读取文件的各行并输出,可以用如下命令grep -n '' hhh.txt意思就是从hhh.txt中选出含有空白字符的各行。

此外如果要特意指定查找某某行末或者行头的字符,可以用'^'和'$'来执行。

用*和\{n\m}这样的搭配可以指定查找重复的字符。

这里用上个转义符\可以将特殊符号的特殊意义去掉,这里就是仅仅去查找文件中的单引号,结果是没有。

文件的格式化处理

用awk可以使用字段为根据,进行数据的重新整理与输出。

在文件的比对中,可以用diff或cmp进行比对,其中diff主要 用在纯文本文件方面的新旧版本的比对。

printf可以通过一些特殊化符号来将数据进行格式化输出。

第十二章学习shell脚本

shell script更像是早期的.bat文件,最简单的功能就是将许多的用户命令写在一起,使得用户可以用one touch的方法去处理复杂的操作,shell脚本可以被近似的看作是批处理文件,所以不需要编译就可以运行,这让我想起了以前安装ros2下载的鱼香ros小软件就是用了shell脚本。shell脚本可以帮助软件员更好的管理主机,是必备之品。

学习shell脚本在自动化主机管理很有用,管理主机每天的任务就有查询日志文件,跟踪流量,监控用户使用主机状态等等,我在猎聘网站上找到的和Linux相关的工作要求,关键的就是shell编程。

编写第一个shell脚本与执行

#name=hcy
#time=2025.2.2
#this program is an easy test shell script
PATH=/root/hello.sh
export PATH
echo "hello world\a\n"
exit 0

这就是一个最简单的shell脚本,执行后是打印出来hello world.执行可以用:sh hello.sh或者chmod a+x hello.sh;./hello.sh(让我想起了安装conda的时候下载的安装执行脚本,就是用这段抽象的命令给安装完毕了)运行示例如下:

简单的Shell脚本练习

示例如下,主要用到了输入信息和数学运算。

#easy shell script examples
read -p "input date" date #提升输入日期
read -p "input your name" name #提示输入名字
echo -e "\n date is ${date},your name is ${name}\n" #最后打印输出
echo -e $((13/3)) #采用特定格式进行运算
​

判断式的学习

a=500
echo '500MB will be download'
read -p "Continue? [y]or[n]" inputval
if [ "$inputval" = "y" ] || [ "$inputval" = "Y" ]; thenecho "begin download"exit 0
elif [ "$inputval" = "n" ] || [ "$inputval" = "N" ]; thenecho "download failed"exit 0
elseecho "please check the spelling"exit 0
fi
​

在这段示例代码中模拟了平常下载软件的一个片段,保存为.sh即可执行。

read -p "input your choice " choice
case ${choice} in "one")echo "Your choice is one ";;"two")echo "Your choice is two";;"three") echo "Your choice is three";;*)echo "Your usage ${0} {one|two|three}";;
esac
​
​

而上面这段代码展示了调用shell script中的case语法的一个格式,判断输入的选择并输出对应的值。

函数功能的使用

在shell脚本中也有函数功能,可以调用函数来执行输出方便代码编写。下面是个例子:

#!/bin/bash
function printtit () {echo -n "your choice is "
}
echo "this program will check your spelling"
case "${1}" in"one")printtit; echo "${1}";;"two")printtit; echo "${1}";;"three")printtit; echo "${1}";;*)echo "usage: ${0} {one|two|three}";;
esac
​

在里面定义了个函数,并在后面调用,要注意在这里执行这段脚本的命令是:bash filename.sh而非用sh filename.sh在这方面的简单解决办法是把报错和代码喂给AI(deepseek最管用)。

循环功能的使用

下面这段代码是只要用户不输入yes就不断的打印请输入

#!/bin/bash
while [ "${yn}" != "yes" -a "${yn}" != "YES" ]
doread -p "please input yes/YES to stop: " yn
done
echo "OK"

执行效果如下,提到这里要注意的是,shell语法对缩进和空格特别敏感,"${yn}"和[间一定要有空格。

下面是执行for循环进行一个简单的相加操作。

#!/bin/bash
read -p "input a number" nu
s=0
for (( i=1; i<=${nu} ; i=i+1 ))
do s=$((${s}+${i}))
​
done
echo "the result is ${s}"

执行的结果如下所示:

总结

shell script是我到现在学过的一门很特殊的编程语言,其特点是编程格式非主流,对空格等要求极为敏感,上面的这些例子不过是一些入门的了解,shell学好才算是Linux从会用到略懂垮了一个门槛。

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

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

相关文章

学习日记-250203

一.论文 看师兄写好的一稿。 二、计划&#xff1a; 继续看论文里的问题。 然后继续看promptCD相关&#xff0c;明天要看论文啦,今天家里有些事比较忙&#xff08;碎碎念&#xff09; 三. &#xff09;——&#xff08; 注册了 openreview,ORCID,Google scholar&…

python学opencv|读取图像(五十四)使用cv2.blur()函数实现图像像素均值处理

【1】引言 前序学习进程中&#xff0c;对图像的操作均基于各个像素点上的BGR值不同而展开。 对于彩色图像&#xff0c;每个像素点上的BGR值为三个整数&#xff0c;因为是三通道图像&#xff1b;对于灰度图像&#xff0c;各个像素上的BGR值是一个整数&#xff0c;因为这是单通…

Kafka ACL(访问控制列表)介绍

文章目录 Kafka ACL&#xff08;访问控制列表&#xff09;介绍1. Kafka ACL 的基本概念1.1 Kafka ACL 的目标1.2 Kafka ACL 的组成部分 2. Kafka 支持的资源类型2.1 Topic&#xff08;主题&#xff09;2.2 Consumer Group&#xff08;消费者组&#xff09;2.3 Cluster&#xff…

在 WSL2 中重启 Ubuntu 实例

在 WSL2 中重启 Ubuntu 实例&#xff0c;可以按照以下步骤操作&#xff1a; 方法 1: 使用 wsl 命令 关闭 Ubuntu 实例: 打开 PowerShell 或命令提示符&#xff0c;运行以下命令&#xff1a; wsl --shutdown这会关闭所有 WSL2 实例。 重新启动 Ubuntu: 再次打开 Ubuntu&#x…

Spring Boot 2 快速教程:WebFlux处理流程(五)

WebFlux请求处理流程 下面是spring mvc的请求处理流程 具体步骤&#xff1a; 第一步&#xff1a;发起请求到前端控制器(DispatcherServlet) 第二步&#xff1a;前端控制器请求HandlerMapping查找 Handler &#xff08;可以根据xml配置、注解进行查找&#xff09; 匹配条件包括…

小程序设计和开发:如何研究同类型小程序的优点和不足。

一、确定研究目标和范围 明确研究目的 在开始研究同类型小程序之前&#xff0c;首先需要明确研究的目的。是为了改进自己的小程序设计和开发&#xff0c;还是为了了解市场趋势和用户需求&#xff1f;不同的研究目的会影响研究的方法和重点。例如&#xff0c;如果研究目的是为了…

使用 Numpy 自定义数据集,使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数

1. 导入必要的库 首先&#xff0c;导入我们需要的库&#xff1a;Numpy、Pytorch 和相关工具包。 import numpy as np import torch import torch.nn as nn import torch.optim as optim from sklearn.metrics import accuracy_score, recall_score, f1_score2. 自定义数据集 …

Unity-编译构建Android的问题记录

文章目录 报错&#xff1a;AAPT2 aapt2-4.1.2-6503028-osx Daemon #0 Failed to shutdown within timeout报错信息解读&#xff1a;原因分析最终处理方法 报错&#xff1a;AAPT2 aapt2-4.1.2-6503028-osx Daemon #0 Failed to shutdown within timeout 报错信息解读&#xff1…

【axios二次封装】

axios二次封装 安装封装使用 安装 pnpm add axios封装 // 进行axios二次封装&#xff1a;使用请求与响应拦截器 import axios from axios import { ElMessage } from element-plus//创建axios实例 const request axios.create({baseURL: import.meta.env.VITE_APP_BASE_API,…

SQL进阶实战技巧:如何构建用户行为转移概率矩阵,深入洞察会话内活动流转?

目录 1 场景描述 1.1 用户行为转移概率矩阵概念 1.2 用户行为转移概率矩阵构建方法 (1) 数据收集

Vue3.0实战:大数据平台可视化(附完整项目源码)

文章目录 创建vue3.0项目项目初始化项目分辨率响应式设置项目顶部信息条创建页面主体创建全局引入echarts和axios后台接口创建express销售总量图实现完整项目下载项目任何问题都可在评论区,或者直接私信即可。 创建vue3.0项目 创建项目: vue create vueecharts选择第三项:…

Java自定义IO密集型和CPU密集型线程池

文章目录 前言线程池各类场景描述常见场景案例设计思路公共类自定义工厂类-MyThreadFactory自定义拒绝策略-RejectedExecutionHandlerFactory自定义阻塞队列-TaskQueue&#xff08;实现 核心线程->最大线程数->队列&#xff09; 场景1&#xff1a;CPU密集型场景思路&…

【VM】VirtualBox安装ubuntu22.04虚拟机

阅读本文之前&#xff0c;请先根据 安装virtualbox 教程安装virtulbox虚拟机软件。 1.下载Ubuntu系统镜像 打开阿里云的镜像站点&#xff1a;https://developer.aliyun.com/mirror/ 找到如图所示位置&#xff0c;选择Ubuntu 22.04.3(destop-amd64)系统 Ubuntu 22.04.3(desto…

Pandas基础08(分箱操作/时间序列/画图)

3.8.1 Pandas分箱操作 数据分箱&#xff08;Binning&#xff09; 是一种数据预处理方法&#xff0c;用于将连续型变量的数值范围分割成若干个区间或“箱”&#xff08;bins&#xff09;&#xff0c;将数据按照这些区间进行分类&#xff0c;从而转换为离散型变量。这种方法常用…

C#,shell32 + 调用控制面板项(.Cpl)实现“新建快捷方式对话框”(全网首发)

Made By 于子轩&#xff0c;2025.2.2 不管是使用System.IO命名空间下的File类来创建快捷方式文件&#xff0c;或是使用Windows Script Host对象创建快捷方式&#xff0c;亦或是使用Shell32对象创建快捷方式&#xff0c;都对用户很不友好&#xff0c;今天小编为大家带来一种全新…

国产编辑器EverEdit - 输出窗口

1 输出窗口 1.1 应用场景 输出窗口可以显示用户执行某些操作的结果&#xff0c;主要包括&#xff1a; 查找类&#xff1a;查找全部&#xff0c;筛选等待操作&#xff0c;可以把查找结果打印到输出窗口中&#xff1b; 程序类&#xff1a;在执行外部程序时(如&#xff1a;命令窗…

Vue-data数据

目录 一、Vue中的data数据是什么&#xff1f;二、data支持的数据类型有哪些&#xff1f; 一、Vue中的data数据是什么&#xff1f; Vue中用到的数据定义在data中。 二、data支持的数据类型有哪些&#xff1f; data中可以写复杂类型的数据&#xff0c;渲染复杂类型数据时只要遵…

02.03 递归运算

使用递归求出 1 1/3 -1/5 1/7 - 1/9 ... 1/n的值。 1>程序代码 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #inc…

数据分析系列--⑥RapidMiner构建决策树(泰坦尼克号案例含数据)

一、资源下载 二、数据处理 1.导入数据 2.数据预处理 三、构建模型 1.构建决策树 2.划分训练集和测试集 3.应用模型 4.结果分析 一、资源下载 点击下载数据集 二、数据处理 1.导入数据 2.数据预处理 三、构建模型 1.构建决策树 虽然决策树已经构建,但对于大多数初学者或…

高阶开发基础——快速入门C++并发编程6——大作业:实现一个超级迷你的线程池

目录 实现一个无返回的线程池 完全代码实现 Reference 实现一个无返回的线程池 实现一个简单的线程池非常简单&#xff0c;我们首先聊一聊线程池的定义&#xff1a; 线程池&#xff08;Thread Pool&#xff09; 是一种并发编程的设计模式&#xff0c;用于管理和复用多个线程…