shell基础(二)

Shell的基础考题二 1.计算根分区的磁盘使用率,百分比精确到2位小数[root@server0 ~]# df文件系统          1K-块    已用    可用 已用% 挂载点/dev/vda1      10473900 3124228 7349672   30% /devtmpfs         927072       0  927072    0% /devtmpfs            9426... 阅读详情

test文件判断命令

命令功能:检测文件类型和比较运算

命令用法

test [命令选项] 表达式

命令选项

-d  检查文件是否存在且为目录
-e  检查文件是否存在
-f  检查文件是否存在且为文件
-r  检查文件是否存在且可读
-s  检查文件是否存在且不为空
-w  检查文件是否存在且可写
-x  检查文件是否存在且可执行
-O  检查文件是否存在并且被当前用户拥有
-G  检查文件是否存在并且默认组为当前用户组
-nt file1 -nt file2  检查file1是否比file2新
-ot file1 -ot file2  检查file1是否比file2旧    
-ef file1 -ef file2  检查file1是否与file2是同一个文件,判定依据的是i节点
以上只列出部分命令选项,详细的可以通过:man test获得。

数组

# 创建数组
arr=(1 2 3 4 5)
# 通过下标修改值
arr[0]="A"
# 显示所有的值
echo ${arr[*]}
# 获取元素的数量
echo "元素的数量:"${#arr[*]}
# 获取数组元素的索引
echo ${!arr[@]}
# 切片:获取部分元素
echo "获取2~4的元素:"${arr[@]:2:3}
# 遍历循环所有的值
for i in ${arr[*]}
do
    echo $i
done
# 创建关联数组
declare -A asso_array1
declare -A asso_array2
declare -A asso_array3
​
# 一次赋一个值
数组名[索引]=变量值
[root@zuolaoshi ~]# asso_array1[linux]=one
[root@zuolaoshi ~]# asso_array1[java]=two
[root@zuolaoshi ~]# asso_array1[php]=three
# 一次赋多个值
[root@zuolaoshi ~]# asso_array2=([name1]=harry [name2]=jack [name3]=amy [name4]="Miss zhang")
​
# 查看关联数组
[root@zuolaoshi ~]# declare -A
declare -A asso_array1='([php]="three" [java]="two" [linux]="one" )'
declare -A asso_array2='([name3]="amy" [name2]="jack" [name1]="harry" [name4]="Miss zhang" )'
​
# 管理数组取值
[root@zuolaoshi ~]# echo ${asso_array1[linux]}
one
[root@zuolaoshi ~]# echo ${asso_array1[php]}
three
[root@zuolaoshi ~]# echo ${asso_array1[*]}
three two one
[root@zuolaoshi ~]# echo ${!asso_array1[*]}
php java linux
[root@zuolaoshi ~]# echo ${#asso_array1[*]}
3
[root@zuolaoshi ~]# echo ${#asso_array2[*]}
4
[root@zuolaoshi ~]# echo ${!asso_array2[*]}
name3 name2 name1 name4

常用数据处理命令

  • 数据检索命令

行检索:grep egrep 字符串检索:cut tr

  • 数据处理命令

数据排序:sort 数据去重: uniq

文本数据合并: paste 数据输出: tee 数据处理: xargs

grep:负责从数据源中检索对应的字符串,行过滤

  • grep -i root passwd 忽略大小写匹配包含root的行

  • grep -w ftp passwd 精确匹配ftp单词

  • grep -wo ftp passwd 打印匹配到的关键字ftp

  • grep -n root passwd 打印匹配到root关键字的行好

  • grep -ni root passwd 忽略大小写匹配统计包含关键字root的行

  • grep -nic root passwd 忽略大小写匹配统计包含关键字root的行数

  • grep -i ^root passwd 忽略大小写匹配以root开头的行

  • grep bash$ passwd 匹配以bash结尾的行

  • grep -n ^$ passwd 匹配空行并打印行号

  • grep ^# /etc/vsftpd/vsftpd.conf 匹配以#号开头的行

  • grep -v ^# /etc/vsftpd/vsftpd.conf 匹配不以#号开头的行

  • grep -A 5 mail passwd 匹配包含mail关键字及其后5行

  • grep -B 5 mail passwd 匹配包含mail关键字及其前5行

  • grep -C 5 mail passwd 匹配包含mail关键字及其前后5行

cut 切割字符串,按照顺序获取某一段内容;

  • -d :指定分隔符

  • -f :显示的列 -f1代表第一列

  • -c :截取每行的某几个字符 -c1-5代表每行的1-5个字符

tr 字符转换:替换字符、删除字符

  • 语法:commands|tr 'string1' 'string2'

    tr 'string1' 'string2' < filename

    tr options 'string1' < filename

    • -d 删除字符串1中所有输入字符。

    • -s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。

sort 排序显示,默认排序规则是字符编码排序

  • 语法:sort [options] [filename]

    • -u :去重

    • -r :降序,默认是升序

    • -o : 将排序结果输出到文件中 类似 重定向符号 >

    • -n :按照数字的排序规则排序

    • -k :指定列来排序

uniq 去除连续的重复行,去重前先使用sort排序

  • 语法:uniq [options] [filename]

    • -i:忽略大小写

    • -c: 统计重复行次数

    • -d:只显示重复行

tee 双向输出,在屏幕输出内容的同时,还可以保存到文件里

  • -a:双向追加重定向

  • 语法:somecommand |tee filename

paste 将多个文件中的内容按列合并输出到屏幕,不会改变源文件

  • -d:指定分隔符,默认是tab,只接受一个字符,要用单引号引起来

  • -s:行列转换后显示

xargs 将前一个命令的执行结果作为后一个命令的参数

  • 管道(|):上一个命令的输出作为下一个命令的输入,做的是数据源。

  • 命令格式: ''[somecommand]|[filename]'' |xargs -item command

vim download.txt
https://127.0.0.1/1.txt
https://127.0.0.1/2.txt
......
# 通过xargs+wget实现批量下载
cat download.txt |xargs wget
# 等价于wget一个个下载
wget https://127.0.0.1/1.txt
wget https://127.0.0.1/2.txt
......

特殊符号

符号功能
!!自动执行上一次执行的命令
$获取变量的值
$(命令)获取命令的执行结果``
&写在命令执行的结尾让前台程序在后台执行
&&与运算
&>将标准输出和标准错误输出都重定向到一个文件
;在命令行中,一行执行多条命令
>输出重定向,将命令执行结果保存到文件中,不存在时会创建文件,存在时会覆盖原文件内容
>>追加重定向,将内容添加到文件的最后,不覆盖,只追加
<输入重定向,读取文件中的内容,交给命令执行
<<追加输入重定向,将键盘输入的内容交给命令批量执行
|将前一个命令的执行结果交给后一个命令执行

进程管理

  • jobs 查看进程后台号

  • bg 编号 放到后台继续运行

  • fg 编号 将进程放到前台运行

sed(行编辑器)

sed数据处理原理

文本中的一行→缓存→电脑屏幕

sed 命令语法:

sed [options] ‘{command}[flags]’ [filename]

1)sed常用内部命令

-a 文件内容增加操作,将数据追加到某个位置之后

-i 文件内容增加操作,将数据插入到某个位置之前

-d 文件内容删除,将文件中的指定数据删除

-s 文件内容修改操作–替换,将一行中匹配的内容替换为新的数据

-c 文件内容修改操作–更改,将一行中匹配的内容替换为新的数据

-y 文件内容修改操作–字符转换,将一行中匹配的内容替换为新的数据

-p 文件内容查看,将文件内容输出到屏幕

#command   对文件干什么
sed常用内部命令
a   在匹配后面添加
i   在匹配前面添加
d   删除
s   查找替换  字符串
c   更改
y   转换   N D P 
p   打印

2)命令选项说明

sed语法在sed命令中,命令选项是对sed中的命令增强

-e 在命令行中使用多个命令,用分号“;”隔开

-f 从文件读取编辑器命令,比如把替换修改写入vim文件里,再用-f直接调用这个文件

-n 抑制内存输出

-r 使用正则表达式

#命令选项
-e script 将脚本中指定的命令添加到处理输入时执行的命令中  多条件,一行中要有多个操作
-f script 将文件中指定的命令添加到处理输入时执行的命令中
-n        抑制自动输出
-i        编辑文件内容
-i.bak    修改时同时创建.bak备份文件。
-r        使用扩展的正则表达式
!         取反 (跟在模式条件后与shell有所区别)

注意:!!!

数据处理只是在缓存中完成的,并没有实际修改文件内容,如果需要修改文件内容可以直接使用-i命令选项。

-i是一个不可逆的操作,所以在修改文件之前我们可以先备份。

sed -i.bak '命令' 原文件(这样就会发现有一个叫做原文件.bak的备份文件,而原文件已经被我们修改啦)

3)标志

在sed命令中,标志是对sed中的内部命令做补充说明,

数字标志:此标志是一个非零正数,默认情况下,执行替换的时候,如果一行中有多个符合的字符串,如果没有标志位定义,那么只会替换第一个字符串,其他的就被忽略掉了,为了能精确替换,可以使用数字位做定义。而如果想要全部替换就把这个数字位替换为g

g标志:将一行中的所有符合的字符串全部执行替换

p标志:打印文本内容,类似于-p命令选项

#flags
数字             表示新文本替换的模式
#替换一行中的第二处dog为cat
sed 's/dog/cat/2' data2
​
g:             表示用新文本替换现有文本的全部实例
#将data1文件中的所有dog替换为cat
sed 's/dog/cat/g' data2
​
p:             表示打印原始的内容
w filename:     将替换的结果写入文件

awk——对输出流的处理

awk [options] ‘[BEGIN]{program}[END]’ [FILENAME]

#常用命令选项
-F fs 指定描绘一行中数据字段的文件分隔符  默认为空格
-f file 指定读取程序的文件名
-v var=value 定义awk程序中使用的变量和默认值
#注意:awk 程序由左大括号和右大括号定义。 程序命令必须放置在两个大括号之间。由于awk命令行假定程序是单文本字符串,所以必须将程序包括在单引号内。
1)程序必须放在大括号内
2)程序必须要用单引号引起来
#awk程序运行优先级是:
    1)BEGIN: 在开始处理数据流之前执行,可选项
    2)program: 如何处理数据流,必选项
    3)END: 处理完数据流后执行,可选项

1)awk对字段(列)的提取

字段提取:提取一个文本中的一列数据并打印输出

字段相关内置变量

$0 表示整行文本

$1 表示文本行中的第一个数据字段

$2 表示文本行中的第二个数据字段

$N 表示文本行中的第N个数据字段

$NF 表示文本行中的最后一个数据字段

例如:打印test第六个字段 awk '{print $NF}' test

2)命令选项详解

-F 指定字段与字段的分隔符 awk -F ':' '{print $1,$3}' /etc/passwd

-f file 如果awk命令是日常重复工作,而又没有太多变化,可以将程序写入文件,每次使用-f调用程序文件就好,方便,高效。

# cat abc 
{print $1,$3,$NF}
# awk -f abc test
1 quick dog
2 quick dog
3 quick dog
4 quick dog
5 quick dog

-v 定义变量

# 定义了一个变量 name=baism,然后调用变量读出数据

awk -v name='baism' 'BEGIN{print name}'

3)对记录(行)的提取

记录提取:提取一个文本中的一行并打印输出

记录的提取方法有两种:a、通过行号 b、通过正则匹配

记录相关内置变量

NR: 指定行号 number row

#举个例子,提取test第三行数据
#指定行号为3
awk 'NR==3{print $0}' test 
#指定行的第一个字段精确匹配字符串为3
awk '$1=="3"{print $0}' test 
都会显示第三行:3 the quick brown fox jumps over the lazy cat . dog
命令筛选条件核心逻辑适用场景
NR==3行号等于 3按 “位置” 筛选明确需要处理文件中特定行号的内容
$1=="3"第一个字段等于 3按 “内容” 筛选需要根据行中第一个字段的具体值来筛选行

4)awk对字符串的提起

#打印test第三行的第6个字段,也就是第6列

awk 'NR==3{print $6}' test

对称加密和非对称加密、公钥和私钥、单向认证和双向认证、数字签名、数字证书、根证书 文章目录1. 什么是公钥和私钥?2. 加密算法2.1 对称加密2.2 非对称加密2.2.1 非对称加密的重要性质2.2.2 非对称加密算法应用2.2.2.1 应用1 加密通信2.2.2.1.1 单向认证和双向认证2.2.2.1 应用2 数字签名3. 数字签名3.1 数字签名用法演示3.2 数字签名存在问题4. 数字证书(Digital Certificate)4.1 创建数字证书4.1.1 举例,CA如何给我们签发一个有效证书: 1. 什么是公钥和私钥? 摘自《什么是公钥和私钥?》 公钥(Public Ke 阅读详情

相关推荐

优化求解器性能:当分支切割算法中的gap停滞不前时如何应对

本文深入探讨了当分支切割算法求解复杂整数规划问题时,gap停滞不前的根本原因与应对策略。文章指出gap停滞源于上界(找不到更优整数解)或下界(证明过程缓慢)提升受阻,并提供了从模型改写、自定义割平面、调整搜索策略到参数调优等一系列实战方法,帮助优化工程师有效打破求解僵局,推动gap下降。

weixin_29294597的博客 381

shell基础二

1.shell脚本 新建文本,后缀名sh,例如:abc.sh 注意: 在脚本第一行需要写 #!/bin/bash #! 规定写法,说明使用何种解释器执行源代码 # 表示注释 注意: php也可以写shell脚本 2.shell脚本执行 ...

a178796665的博客 98

【python】import pandas as pd用法

是 Python 里最常用的数据分析库之一。 的意思是:导入 pandas 库,并给它起个别名 。这样用起来更简洁: 下面总结 pandas 的常见用法(配例子)。目录🔹 1. 数据结构(1) Series(一维数据,类似于数组 + 标签)(2) DataFrame(二维数据表,类似于 Excel 表格)🔹 2. 数据读写🔹 3. 数据查看🔹 4. 数据选择与索引🔹 5. 数据清洗🔹 6. 数据运算🔹 7. 数据筛选(布尔索引)🔹 8. 分组与聚合🔹 9. 排序 Pandas 常用方

2401_86285609的博客 1531

shell基础实例二

初学shell,给大家分享我的一下我的练习题目,有不对或者写的不好的地方还请大家指出。 1.写脚本模拟Linux登录shell。具体为: Login:(输入用户名user) Password:(输入密码123456) 如果都输入正确就换行显示:“Both the account and password are right!Login Success!”如果输入错误就换行显示:“Input is error!Login Failed!” 参考代码 #!/bin/bash #var Login

蜻蜓队长的博客 1719

modbus-esp8266库深度解析:工业级Modbus协议栈实现

Modbus是一种广泛应用于工业自动化领域的通用串行通信协议,其核心在于标准化的功能码、寄存器模型与帧结构设计。基于RTU、ASCII和TCP三种传输变体,Modbus协议通过主从架构实现设备间可靠数据交互,具备低开销、高兼容性与强实时性等技术价值。在边缘计算与工业物联网场景中,它被广泛用于PLC通信、传感器数据采集、HMI集成及远程固件升级(FOTA)等关键任务。针对ESP8266/ESP32等Wi-Fi微控制器平台,modbus-esp8266库提供了完整协议栈支持,涵盖多实例并发、回调驱动架构、零拷贝

weixin_42315569的博客 349

ThinkBook 16p 2024 BIOS降压定频实战:从解锁CFG Lock到AC Loadline调优

高性能笔记本在满载时频繁撞上温度墙,通常源于固件层默认电压冗余过大,而系统级降压工具又受限于CFG Lock锁定。要根治问题,需要从BIOS固件层面理解电压管理机制——AC/DC Loadline参数控制着CPU在不同负载下的电压请求,通过修改这些负载线值可以安全降低电压,解锁CFG Lock后还能让XTU、ThrottleStop等软件调参工具恢复可用。这种BIOS级调优在工程实践中广泛用于改善散热、稳定频率、压降风扇噪音,尤其适用于联想ThinkBook 16p 2024与拯救者Y9000P等采用HX平

weixin_32496547的博客 387

【Shell】基础语法(二)

Shell基础语法第二部分。

大三小白C++进阶之路 1346

Microapp 接入vite子应用

MicroApp接入vite版本,干货满满,手把手步骤说明,加上报错说明,赶紧上车!

outsider76557的博客 4658

shell基础总结(二)

shell基础总结二 PATH变量 PATH变量的值是用":"分隔的路径,这些路径就是系统查找命令的路径。也就是说,输入一个程序名,如果没有写入路径,系统就会到PATH变量定义的路径中去寻找是否有可以执行的程序,如果找到则执行,否则会报“找不到命令”的错误。 只要把程序脚本复制到PATH变量定义的任意路径中,比如/bin/目录下,以后这个脚本就可以直接执行了,不用再指定绝对路径或相对路径。 ...

白衣不染尘的博客 380

【日常小结】项目Modbus RTU 协议

Modbus RTU(远程终端) 协议 一、前言 最近因为码跺宽度测量项目推广升级,更换了摄像头(换成了基恩士摄像头)和光栅(换成了施莱格05LCM系列光栅),导致原来的程序用不了了,然而这个软件升级的任务落到了我身上,作为机械非科班出身的我要学习TCP和Modbus RTU通信协议,也算是自我突破了。本文只对Modbus/RTU/HEX 进行简单的小结。 二、Modbus Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻

weixin_39681471的博客 831

matlab特征提取和分类_SAST Weekly|MATLAB机器学习初探——做个心音分类器

SAST weekly 是由电子工程系学生科协推出的科技系列推送,内容涵盖信息领域技术科普、研究前沿热点介绍、科技新闻跟进探索等多个方面,帮助同学们增长姿势,开拓眼界,每周更新,欢迎关注!欢迎愿意分享知识的同学投稿至 eesast@mail.tsinghua.edu.cn , 期待你的作品!本期的SAST weekly,想跟大家分享一下如何用MATLAB进行初步的机器学习,构建一个正常/...

weixin_36453829的博客 5579

shell的基础学习二

关于,shell数组,基本运算符,echo命令,printf命令,test命令的基础学习。

weixin_51884452的博客 769

基于 STM32 单片机的实验室多参数安全监测系统设计与实现

本系统以 STM32F103C8T6 单片机为核心,集成温湿度监测、烟雾检测、气体泄漏报警、人体移动监测等功能模块,通过 OLED 显示屏实时显示数据,并支持 Wi-Fi 远程传输。系统可对实验室异常环境参数(如高温、烟雾、燃气泄漏)及非法入侵实时报警,保障实验室安全。本文从硬件选型、电路设计到软件实现提供了完整的实验室安全监测系统方案,可根据实际需求调整传感器类型和通信方式,适用于科研、教学等场景的环境安全防护。:可增加继电器模块控制通风设备或切断电源,集成 ZigBee 组网实现多实验室联动监测。

weixin_42300449的博客 1285

SHELL编程基础(二)

SHELL编程基础(二) 编写一个简单的程序 #thisissample//注释 echo"hello,welcometoFedora6" echo"Loggedin$USER." env|grepPATH echo$PATH 1、变量 1)用户变量 VAL=val 如 St?nt=tom echoSt?nt e...

hopegrace的博客 220

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Shell基础(二)

Shell基础2(一)输入输出重定向1.1 标准输入输出1.2 输出重定向1.3输入重定向三级目录 (一)输入输出重定向 1.1 标准输入输出 1.2 输出重定向 1.3输入重定向 三级目录

qq_39071309的博客 147

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Shell编程基础(二)

入门: #第一个shell程序 #!/bin/bash #第一个shell小程序 echo hello world! 以上,我们的第一个shell小程序就完成了,结果当然是输出我们熟悉的hello world。 第一行表示我们选择使用bash shell。 shell中#符号表示注释。shell的第一行比较特殊,一般都会以#!开始来指定使用的shell类型。在l...

月光骆驼的博客 163

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

shell基础知识(shell入门)二

1、shell简介 2、变量类型:事先确定数据的存储格式和长度 3、grep, egrep, fgrep 4、逻辑运算符 5、bash变量类型 6、条件判断 7、shell中进行算术运算: 8、文件测试 9、参数传递 一、shell简介 编译器,解释器 编程语言:机器语言、汇编语言、高级语言 静态语言:编译型语言 强类型(变量) 事先转换成可执行格式 ...

angelxf520的博客 870

Linux基础(二)shell脚本

Linux基础(二)shell脚本

虎鲸不是鱼 3815

shell脚本基础知识二

主要介绍shell脚本中的函数循环及数组

moledyzhang的博客 751

Shell基础(二)

Shell命令 1. Shell命令基本格式 Shell 命令的基本格式如下: command [选项] [参数] []表示可选的,也就是可有可无。有些命令不写选项和参数也能执行,有些命令在必要的时候可以附带选项和参数。 比如:ls 是常用的一个命令,它属于目录操作命令,用来列出当前目录下的文件和文件夹。ls 可以附带选项,也可以不带,不带选项的写法为: [cuining@localhost ~...

Little Coal的博客 552

Shell基础二

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33705053的博客 80

shell编程基础二

1,获取命令执行的结果,字符串拼接(脚本最常使用的功能)  法一: cmd_result=$(date +%Y%b%d)        //使用变量获取命令执行的结果或者 cmd_result=`date +%Y%b%d`   反引号   mysqldump -uroot -pfeng --all jiale>/root/jiale$cmd_result.sql    //执行字符串和

cxyshine的专栏 654

Shell基础 (二)

测试语句(重点) 等号左右必须有空格,中括号左右必须有空格 test 1 = 1 [ 1 = 1 ] 逻辑表达式 &&符号 命令1 && 命令2 如果命令1执行成功,那么执行命令2 如果命令1执...

毛毛虫会长大 143

shell 基础(二)

四则运算: + - * / % 辅助操作符 $((表达式)) $[表达式] expr 表达式 expr arg_1+arg_2 let 计算表达式并赋值 列 let a=1+1 二、 ++运算符 前++加一,后++不加一 (使用变量时) i = 3 c = $((i++)) print $c #3 三、数组 shell中数组分为:普通 关联 Shell 中不需要创建数组,不需要设置容量...

我是泛滥 331
上一篇: Shell基础
下一篇: Nginx基础
chen_note
博客等级 码龄1年 251粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值