linux-shell编程

shell编程

1. 变量、条件判断、流程控制、函数

$n   (功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})

$#   (功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性)。

$*    (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)

$@  (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)

 

$?  (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定1-255),则证明上一个命令执行不正确了。)

read读取控制台输入

1)基本语法

read  (选项)  (参数)

选项:

-p:指定读取值时的提示符;

-t:指定读取值时等待的时间(秒)如果-t不加表示一直等待

参数

       变量:指定读取值的变量名

  

  

  

执行系统函数需要用例如`date`特殊符号包裹,才可显示

     

  

(())等价于[]

  

if条件判断  

>    -gt(greater than)   

<    -lt(less than)    

>=   -ge(greater equal) 

<=   -le(less than)

==   -eq(equal)

!=    -ne(not equal)

(1)单分支

if [ 条件判断式 ];then

    程序

fi

或者

if  [ 条件判断式 ]

then

    程序

fi

(2)多分支

if [ 条件判断式 ]

then

    程序

elif [ 条件判断式 ]

then

       程序

else

       程序

fi

$?返回0表示上一个命令执行成功

$?返回1-255表示上一个命令执行成功

修改文件名mv 原文件名 新文件名

for循环

1)基本语法1

for (( 初始值;循环控制条件;变量变化 ))

do

    程序

done

普通for可循环和增强for循环

for((i=0;i<=100;i++))

while循环

1)基本语法

while [ 条件判断式 ]

do

    程序

done

while循环中break和continue区别

while循环读取输出文件内容

     

遍历读取并查找,使用管道操作grep搜索内容

case语句

1)基本语法

case $变量名 in

"值1")

    如果变量的值等于值1,则执行程序1

;;

"值2")

    如果变量的值等于值2,则执行程序2

;;

    …省略其他分支…

*

    如果变量的值都不是以上的值,则执行此程序

;;

esac

注意事项:

(1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。

(2)双分号“;;”表示命令序列结束,相当于java中的break。

(3)最后的“*)”表示默认模式,相当于java中的default。

  

实现简易计算器:函数或直接计算两种方式

   

函数       

2.文件归档、正则表达式

touch   创建一个文件

[atguigu@hadoop101 shells]$ touch for1.sh

[atguigu@hadoop101 shells]$ vim for1.sh

#!/bin/bash

sum=0

for((i=0;i<=100;i++))

do

        sum=$[$sum+$i]

done

echo $sum

find 查找指定目录下的文件夹名

head – n 2 显示文件前两行

tail – n 2 显示文件末两行

文件归档tar(可搭配定时器定时备份文档)

正则表达式

正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。在Linux中,grep,sed,awk等命令都支持通过正则表达式进行模式匹配。

常规匹配:一串不包含特殊字符的正则表达式匹配它自己,例如:

[atguigu@hadoop101 shells]$ cat /etc/passwd | grep atguigu

就会匹配所有包含atguigu的行

参数:

1)-i 忽略大小写

2)-E "正则表达式"

3)-n 显示匹配的行号,^$ 匹配空行

4)-c 显示匹配的行数,^$ 匹配空行

5)cat -b 表示同时显示匹配的行数

6)-An  显示匹配行及下n行

7)-Bn  显示匹配行及上n行

8)-n  显示匹配上及上下各n行

10.2 常用特殊字符

1)特殊字符:^

^ 匹配一行的开头,例如:

会匹配出所有以root开头的行

2)特殊字符:$

$ 匹配一行的结束,例如

会匹配出所有以bash结尾的行

^$ 匹配空行

3)特殊字符:.

. 匹配一个任意的字符,例如

[atguigu@hadoop101 shells]$ cat /etc/passwd | grep r..t

会匹配包含rabt,rbbt,rxdt,root等的所有行

4)特殊字符:*

* 不单独使用,他和上一个字符连用,表示匹配上一个字符0次或多次,例如

[atguigu@hadoop101 shells]$ cat /etc/passwd | grep ro*t

会匹配rt, rot, root, rooot, roooot等所有行

思考:.* 匹配什么?

5)特殊字符:[ ]

[ ] 表示匹配某个范围内的一个字符,例如

[6,8]------匹配6或者8

[0-9]------匹配一个0-9的数字

[0-9]*------匹配任意长度的数字字符串

[a-z]------匹配一个a-z之间的字符

[a-z]* ------匹配任意长度的字母字符串

[a-c, e-f]-匹配a-c或者e-f之间的任意字符

[atguigu@hadoop101 shells]$ cat /etc/passwd | grep r[a,b,c]*t

会匹配rt,rat, rbt, rabt, rbact,rabccbaaacbt等等所有行

6)特殊字符:\

\ 表示转义,并不会单独使用。由于所有特殊字符都有其特定匹配模式,当我们想匹配某一特殊字符本身时(例如,我想找出所有包含 '$' 的行),就会碰到困难。此时我们就要将转义字符和特殊字符连用,来表示特殊字符本身,例如

[atguigu@hadoop101 shells]$ cat /etc/passwd | grep a\$b

就会匹配所有包含 a$b 的行。

sed

(1)语法 sed [ option 参数]  

1)-n 不自动打印到操作台中 

2)-i 直接编辑文件

(2)

cat fstab -n | sed 5p              编辑第五行,并在屏幕中显示

cat fstab -n | sed -n 4p          只显示第4行

cat fstab -n | sed -n 3,5p       显示3-5行内容

cat fstab -n | sed -n '3p;5p'    显示第三行和第五行

(3)'/正则表达式或内容/p'

sed -n '/etc/p' fstab       显示etc所在行

sed -n '/#/!p' fstab        显示不带#的行

sed -n '/\:/p' fstab         显示含:的行(:是特殊字符,需要使用\转译)

sed -n '/^UUID/p' fstab       显示以UUID开头的行

sed -n '/^$/!p' fstab       不显示空白行

sed -n '/^$/!p' fstab | sed -n '/^#/!p'    不显示空白行和#所在行

i、a—> 追加

sed '1ahello' test.txt    1a代表在第一行后下一行加入hello显示,不改变原文件

sed 'ikb23' test.txt   i表示从第一行开始,每隔一行插入字符

sed -i '1abigdata' test.txt    -i直接在原文件内操作,会修改文件

sed '4ihello' test.txt   4i在第四行加入hello,其他内容向下行迁移

sed '/22/achina' test.txt     在匹配22的所有行的下一行添加china(批量添加)

sed '$aend' test.txt     $a在文件最后一行追加end

sed '/22/igood' test.txt   在匹配22的所有行的上一行添加china(批量添加)

sed '1cjavaweb' test.txt   1c将第一行的内容替换为javaweb

sed '/bigdata/c大数据' test.txt   将匹配到的bigdata行更改为大数据

d-->删除

sed '1d' test.txt   将第一行删除

sed '1~2d' test.txt   从第一行开始,隔行删除,删除奇数行

sed '2~2d' test.txt    从第二行开始,隔行删除,删除奇数行

sed '1,5d' test.txt    删除第一行至第五行

sed '1,2!d' test.txt    删除 除了1-2行之外的行

sed '$d' test.txt       $d删除最后一行

sed '/bigdata/,2d' test.txt  删除匹配到的行及以下2行

sed '/bigdata/,$d' test.txt   删除匹配到的行至最后一行

sed '/^$/d' test.txt   删除匹配到的空行

sed '/22\|^$/!d' test.txt   不删除匹配到的行

s—> 替换

sed 's/22/erer/' test.txt   将匹配到的22替换成erer(非整行替换)

3. Shell工具

3.1  cut

cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。

1)基本用法

cut  [选项参数]  filename        说明:默认分隔符是制表符

2)选项参数说明

选项参数       功能

-f            列号,提取第几列

-d            分隔符,按照指定分隔符分割列,默认是制表符“\t”

-c            按字符进行切割 后加加n 表示取第几列  比如 -c 1

3.2  awk

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

1)基本用法

awk  [选项参数] ‘/pattern1/{action1}  /pattern2/{action2}...’ filename

pattern:表示awk在数据中查找的内容,就是匹配模式

action:在找到匹配内容时所执行的一系列命令

2)选项参数说明

选项参数       功能

-F    指定输入文件折分隔符

-v    赋值一个用户定义变量

3)案例实操

取出2,4,6列的内容,默认分隔符为空格和制表符

取出2,4,6列的内容,指定分隔符为:和,

(1)搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。

(2)搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以“,”号分割。

(3)只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名user,shell在最后一行添加"end of shell"。

注意:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。

(5)将passwd文件中的用户id增加数值1并输出(使用-v参数)

4)awk的内置变量

变量       说明

FILENAME   文件名

NR  已读的记录数(行号)

NF  浏览记录的域的个数(切割后,列的个数)

5)案例实操

打印$2列值小于5.0全部行的内容

打印$2列的最大值

(1)统计passwd文件名,每行的行号,每行的列数

(2)查询文件输出结果中的空行所在的行号

(3)切割IP

综合练习:编写脚本。实现给某个用户发送消息的功能

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

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

相关文章

html(七)meta标签

一 meta标签 1、背景&#xff1a;发现自带某些请求头2、本文没有实际的生产应用场景,仅仅作为技术积累 ① meta标签含义 1、metadata: 元数据,是用于描述数据的数据,它不会显示在页面上,但是机器却可以识别2、应用场景&#xff1a; [1]、SEO搜索引擎优化[2]、定义页面使用…

IP库新增经过实践的Verilog 库

网上严重缺乏实用的 Verilog 设计。Project F 库是尝试让 FPGA 初学者变得更好部分。 设计包括 Clock- 时钟生成 (PLL) 和域交叉Display - 显示时序、帧缓冲区、DVI/HDMI 输出Essential- 适用于多种设计的便捷模块Graphics- 绘制线条和形状Maths- 除法、LFSR、平方根、正弦....…

【系统架构】系统架构设计之数据同步策略

文章目录 一、介绍1.1、分布式系统中的数据同步定义1.2、为何数据同步如此关键1.3、数据同步策略简介 二、为什么需要数据同步2.1、提高系统可用性2.2、备份与灾难恢复2.3、提高性能2.4、考虑地理位置&#xff08;如使用CDN&#xff09; 三、同步备份3.1、定义和概述3.2、工作原…

【仿写tomcat】六、解析xml文件配置端口、线程池核心参数

线程池改造 上一篇文章中我们用了Excutors创建了线程&#xff0c;这里我们将它改造成包含所有线程池核心参数的形式。 package com.tomcatServer.http;import java.util.concurrent.*;/*** 线程池跑龙套** author ez4sterben* date 2023/08/05*/ public class ThreadPool {pr…

代码随想录算法训练营第四十一天 | 343. 整数拆分,96.不同的二叉搜索树

代码随想录算法训练营第四十一天 | 343. 整数拆分&#xff0c;96.不同的二叉搜索树 343. 整数拆分动态规划贪心 96.不同的二叉搜索树 343. 整数拆分 题目链接 视频讲解 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff…

Java源码分析(一)Integer

当你掌握Java语言到了一定的阶段&#xff0c;或者说已经对Java的常用类和API都使用的行云流水。你会不会有一些思考&#xff1f;比如&#xff0c;这个类是如何设计的&#xff1f;这个方法是怎么实现的&#xff1f;接下来的一系列文章&#xff0c;我们一起学习下Java的一些常见类…

香港服务器备案会通过吗?

​  对于企业或个人来说&#xff0c;合规备案是网络运营的基本要求&#xff0c;也是保护自身权益的重要举措。以下内容围绕备案展开话题&#xff0c;希望为您解开疑惑。 香港服务器备案会通过吗? 目前&#xff0c;香港服务器无法备案&#xff0c;这是由于国内管理规定的限制…

人工智能引领图文扫描新趋势

1. 背景和影响 近日&#xff0c;中国大学生服务外包创新创业大赛决赛在江南大学圆满落幕。为满足现代服务产业企业的现实需求&#xff0c;本次竞赛内容设计充分聚焦企业发展中所面临的技术、管理等现实问题&#xff0c;与产业的结合度更紧密&#xff0c;智能文字识别技术是大赛…

Unity VR:XR Interaction Toolkit 输入系统(Input System):获取手柄的输入

文章目录 &#x1f4d5;教程说明&#x1f4d5;Input System 和 XR Input Subsystem&#xff08;推荐 Input System&#xff09;&#x1f4d5;Input Action Asset⭐Actions Maps⭐Actions⭐Action Properties&#x1f50d;Action Type (Value, Button, Pass through) ⭐Binding …

前端框架Vue

Vue 学习路线 学习HTML、CSS和JavaScript基础知识&#xff1a;Vue是基于JavaScript的框架&#xff0c;所以首先需要掌握HTML、CSS和JavaScript的基础知识&#xff0c;包括DOM操作、事件处理、变量和函数等。 学习Vue的基本概念&#xff1a;了解Vue的核心概念&#xff0c;如Vu…

Win10+anaconda+CUDA+pytorch+vscode配置

Win10anacondaCUDApytorchvscode配置 1.安装anaconda2.安装CUDA确认CUDA版本确认CUDA和pytorch版本安装CUDA 3.安装cudnn4.安装Pytorch5.vscode配置安装VScodevscode配置pytorch环境 1.安装anaconda 官网https://www.anaconda.com 下载安装&#xff0c;路径全英文然后记得有一…

【RabbitMQ】消息队列-RabbitMQ篇章

文章目录 1、RabbitMQ是什么1.1、RabbitMQ---使用场景一般场景解耦削峰异步 2、Dokcer安装RabbitMQ2.1安装Dokcer2.2安装rabbitmq 3、RabbitMQ入门案例 - Simple 简单模式4、RabbitMQ的核心组成部分4.1 RabbitMQ整体架构4.2RabbitMQ的运行流程 5、RabbitMQ的模式5.1 发布订阅模…

大数据-玩转数据-Flink App市场推广统计

一、说明 电商网站中已经有越来越多的用户来自移动端&#xff0c;相比起传统浏览器的登录方式&#xff0c;手机APP成为了更多用户访问电商网站的首选。对于电商企业来说&#xff0c;一般会通过各种不同的渠道对自己的APP进行市场推广&#xff0c;而这些渠道的统计数据&#xf…

iOS自定义下拉刷新控件

自定义下拉刷新控件 概述 用了很多的别人的下拉刷新控件&#xff0c;想写一个玩玩&#xff0c;自定义一个在使用的时候也会比较有意思。使应用更加的灵动一些&#xff0c;毕竟谁不喜欢各种动画恰到好处的应用呢。 使用方式如下&#xff1a; tableview.refreshControl XRef…

小程序多图片组合

目录 子组件 index.js 子组件 index.wxml 子组件 index.wxss 父组件引用&#xff1a; 子组件&#xff1a;preview-image 子组件 index.js Component({properties: {previewData: {type: Array,default: [],observer: function (newVal, oldVal) {console.log(newVal, ol…

回归预测 | MATLAB实现GWO-SVM灰狼优化算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现GWO-SVM灰狼优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现GWO-SVM灰狼优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基…

图论基础和表示(Java 实例代码)

目录 图论基础和表示 一、概念及其介绍 二、适用说明 三、图的表达形式 Java 实例代码 src/runoob/graph/DenseGraph.java 文件代码&#xff1a; src/runoob/graph/SparseGraph.java 文件代码&#xff1a; 图论基础和表示 一、概念及其介绍 图论(Graph Theory)是离散数…

MySQL基础篇(二)

DML 定义&#xff1a;Data Manipulation Language、数据操作语言&#xff08;增删改&#xff09; 添加数据&#xff08;INSERT&#xff09;修改数据&#xff08;UPDATE&#xff09;删除数据&#xff08;DELETE&#xff09; 添加数据&#xff08;INSERT&#xff09; 给指定的…

Nginx:网站服务

nginx&#xff1a;一个高性能、轻量级的web服务软件 1、稳定性高&#xff08;没有apache稳&#xff09; 2、系统资源消耗低&#xff08;处理http请求的并发能力很高&#xff0c;单台物理服务器可以处理3万到5万个并发请求&#xff09; 稳定&#xff1a;一般在企业中&#xff…

系统架构设计专业技能 · 信息安全技术

系列文章目录 系统架构设计专业技能 网络技术&#xff08;三&#xff09; 系统架构设计专业技能 系统安全分析与设计&#xff08;四&#xff09;【系统架构设计师】 系统架构设计高级技能 软件架构设计&#xff08;一&#xff09;【系统架构设计师】 系统架构设计高级技能 …