Bash相关

Bash

shellLinux内核与用户之间的解释器程序

变量

  1. 自定义变量,名称可以用数字、字母、下划线、不能以数字开头,不能使用特殊符号,等号两边不能有空格
    • 格式:变量名称=值
  2. 环境变量,由系统提前定义好,使用时直接调用
    • 当前用户名:USER
    • 当前用户ID:UID
    • 当前家目录:HOME
    • 主机名:HOSTNAME
    • 当前用户的解释器:SHELL
    • 当前位置:PWD
    • 存储命令的路径:PATH
    • 一级提示符:PS1
    • 二级提示符:PS2
  3. 位置变量与预定义变量
    • $1:执行脚本时后面第1个位置参数
    • $2:执行脚本时后面第2个位置参数
    • $3:执行脚本时后面第3个位置参数
    • $*:执行脚本时后面所有位置参数
    • $#:执行脚本时后面位置参数的个数
    • $$:当前程序的进程号
    • $?:判断上一条指令是否执行成功

env查看所有环境变量

set查看所有变量

""双引号,界定范围

''单引号,界定范围,屏蔽特殊符号

``或者$()获取命令的执行结果

指令

read

  • -p可以定义提示信息,u相当于自定义名称
#!/bin/bash
read -p "请输入用户名" u
useradd $u

stty

  • stty -echo:屏蔽回显
  • stty echo:恢复回显

expr

  • 加、减、乘、除、取余,直接输出
a=10
b=20
expr $a + $b  # 30

[ ] 或 []或 [](())

  • 加、减、乘、除、取余,不输出
a=10
b=20
echo $[a+b]  # 30

let

  • 加、减、乘、除、取余,不输出,专门用于变量的创建,或者变量的自增
let a++
let a+=10

bc

  • 加、减、乘、除、取余,可以进行小数计算
echo "1.1+1" | bc
echo "scale=3;10/3" | bc  # 指定小数点后保留3位

条件测试

字符串测试

  • ==:判断等号两边的字符串是否相等
  • !=:判断等号两边的字符串是否不等

[ a == b]

[ a != b]

  • -z:判断变量是否为空
  • ! -z:判断变量是否非空
[ -z $a ]
[ ! -z $a ]

逻辑组合

  • &&:条件成功执行
  • ||:条件失败执行
[ root == $USER ] && exit  # &&左边成功,才会执行exit
[ root == $USER ] || exit  # ||左边失败,才会执行exit

数字判断

  • -eq:等于
  • -ne:不等于
  • -gt:大于
  • -ge:大于等于
  • -lt:小于
  • -le:小于等于

文件判断

  • -e:判断文件是否存在
  • -f:判断文件是否存在,并且是普通文件
  • -d:判断文件是否存在,并且是目录
  • -r:判断当前用户对文件是否有读权限
  • -w:判断当前用户对文件是否有写权限
  • -x:判断当前用户对文件是否有执行权限

字符串处理

  • 字符串截取:${变量:index:step}
  • 字符串拼接:c=aaa$c
  • 字符串替换:${变量/旧/新}(替换一个),${变量//旧/新}(替换全部)
  • 字符串删除:${变量#要删除的内容}(从头部开始,匹配最短,##就是匹配最长),${变量%要删除的内容,}(从尾部开始,匹配最短,%%就是匹配最长)
  • 定义变量初值:${变量:-初值}
# 随机6位数密码
x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
for i in {1..6}
don={RANDOM&62}a=${x:n:1}c=a$c
done
echo $c# 字符串替换 aaabbbccc -> aasbbbccc
a=aaabbbccc
a=${a/aaa/aas}# 字符串删除,将abcdefg中的abcd删除
a=abcdefg
echo ${a#*d}  # efg# 字符串删除,将abcdefg中的efg删除
echo ${a%e*}  # abcd# 定义变量初值
echo ${n:-123456}  # 123456

三剑客

grep

基本正则列表

正则符号描述
^匹配行首
$匹配行尾
[]集合,匹配集合中的任意单个字符
[^]对集合取反
.匹配任意单个字符
*匹配前一个字符任意次数(*不允许单独使用)
\{n,m\}匹配一个字符n到m次
\{n\}匹配一个字符n次
\{n,\}匹配一个字符n次及以上
\(\)保留,有个分组的意思
grep '^root' /etc/passwd  # 找以root开头的行
grep 'bash$' /etc/passwd  # 找以bash结尾的行
grep '^$' /etc/passwd  # 找到空行
grep -v '^$' /etc/passwd  # 找到非空行grep '[abcd]' /etc/passwd # 显示a、b、c、d任意一个字母
grep '[^abcd]' /etc/passwd  # 找不是a、b、c、d的其他内容
grep '[0-9]' /etc/passwd  # 显示所有数字
grep '[^0-9]' /etc/passwd  # 显示非数字
grep '[a-z]' /etc/passwd  # 显示所有小写字母
grep '[A-Z]' /etc/passwd  # 显示所有大写字母
grep '[0-9a-Z]' /etc/passwd  # 显示所有数字和字母
grep '[^0-9a-Z]' /etc/passwd  # 显示所有字符grep '.' /etc/passwd  # 显示单个字符
grep 'r..t' /etc/passwd  # 找到rt之间有两个任意字符的行
grep 'ro*t' /etc/passwd  # 找到rt,中间有0个或者多个o的的行 rt rot root这样都行
grep '.*' /etc/passwd  # 找任意,包含空行grep 'ro\{1,2\}t' /etc/passwd  # 找到rt,中间的o可以有1~2个
grep 'ro\{2\}t' /etc/passwd  # 找到rt,中间的o必须是2个
grep 'ro\{2,\}' /etc/passwd  # 找到rt,中间的o有2个或者超过两个的

扩展正则列表

正则符号描述
+最少匹配一次,1次到多次
?最多匹配一次,0次到1次
{n,m}匹配n到m次
()组合成整体
|或者
\b单词边界
\w匹配数字、字母、下划线
\s匹配空格
\d匹配数字,grep -P支持

以上命令均可以加-E选项,并且去掉所有的\

grep 'ro\{1,\}t' /etc/passwd
grep -E 'ro+t' /etc/passwd
egrep 'ro+t' /etc/passwdegrep 's?bin' /etc/passwd  # 匹配sbin或者binegrep 'ro{1,5}t' /etc/passwd # 配置rt,中间的o出现1次到5次egrep '(:0)+' /etc/passwd  # 将:0看做一个整体,匹配1次或多次egrep '^bin|^root' /etc/passwd  # 找到以bin或者root开头的行egrep '\bthe\b' test.txt  # test.txt中的the,两边不允许出现数字,字母,下划线

sed

格式:sed 选项 条件 指令 文件

  • 选项
    • -n:屏蔽默认输出
    • -r:支持扩展正则
    • -i:修改源文件
  • 指令
    • p:输出
    • d:删除
    • s:替换
    • a:行下添加
    • i:行下添加
    • c:替换整行
# 输出
sed -n 'p' /etc/passwd  # 输出第一行
sed -n '2p' /etc/passwd  # 输出第二行
sed -n '2,4p' /etc/passwd  # 输出第二行到第四行
sed -n '2p,4p' /etc/passwd  # 输出第二行和第四行
sed -n '3,+1p' /etc/passwd  # 输出第三行和后面一行
sed -n '/^root/p' /etc/passwd  # 输出以root开头的行
sed -nr '/^root|^bin/p' /etc/passwd  # 输出以root或者bin开头的行
sed -n '1!p' /etc/passwd  # 输出除第一行外的其他行
sed -n '$p' /etc/passwd  # 输出最后一行
sed -n '=' /etc/passwd  # 输出行号
sed -n '$=' test.txt  # 输出文件的总行数# 删除
sed 'd' test.txt  # 删除第一行
sed '4d' test.txt  # 删除第四行
sed '4,7d' test.txt  # 删除4~7行
sed '/^bin/d' test.txt  # 删除以bin开头的行
sed '/xml/d' test.txt  # 删除所有包含xml的行
sed '/!xml/d' test.txt  # 删除不包含xml的行
sed '$d' test.txt  # 删除最后一行
sed '/^$/d'test.txt  # 删除所有空行# 替换
sed 's/2222/3333/' test.txt  # 将所有行的第一个2222替换成3333
sed 's/2222/3333/2' test.txt  # 将所有行的第二个2222替换成3333
sed '1s/2222/3333/1' test.txt  # 将第一行的第一个2222替换成3333
sed 's/2222/3333/g' test.txt  # 将所有的2222替换成3333
sed '/^root/s/2222/3333/g' test.txt  # 将以root开头的行里面的所有的2222替换成3333
sed 's@/bin/bash@/sbin/nologin@g' test.txt  # 将所有的/bin/bash改成/sbin/nologin,这里的@理论上可以用所有数字键上的符号# a、i、c
sed 'a haha' test.txt  # 在每行下面添加一行,内容为haha
sed '1a haha' test.txt  # 在第一行下面添加一行,内容为haha
sed '/^root/a haha' test.txt  # 在开头为root的那一行下面添加一行,内容为haha
sed '$a haha' test.txt  # 在最后一行下面添加一行,内容为hahased '/bin/i heihei' test.txt  # 在有bin的行上面添加一行,内容为heiheised '/aaa$/c hoho' test.txt  # 将以aaa结尾的那一行替换成hoho

awk

格式:awk 选项 条件 指令 文件

  • 选项
    • -F:定义分隔符
  • 指令
    • print:输出
  • 条件
    • /字符串/
  • 内置变量
    • $0所有列、$1第一列、$2第二列、$3第三列…
    • NR:行号
    • NF:列号
  • 处理时机
    • BEGIN:执行一次,读取文档之前执行
    • 逐行任务
    • END:执行一次,读取文档之后执行
awk '/to/{print}' test.txt  # 输出带有to的行
awk '/to/{print $2}' test.txt  # 输出带有to的行的第二列
awk '{print $0,$1}' test.txt  # 输出所有列 第一列
awk '/^deb-src/{print NR": "$0}' test.txt  # 输出以deb-src开头的行号: 内容
awk '{print NR,NF}' test.txt  # 输出所有行的行号,列数
awk -F: '{print $1"的home目录"$6}' /etc/passwd  # 以:为分隔符,输出  用户名的home目录/xxx/xxx
df -h | awk '/\/$/{print $4}'  # 输出/根目录还剩多少空间awk -F: '$6~/root/{print}' /etc/passwd  # 输出第6列包含root的行
awk -F: '$6!~/root/{print}' /etc/passwd  # 输出第6列不包含root的行awk -F: '$3<3{print}' /etc/passwd  # 输出第3列小于3的行
awk -F: 'NR==2{print}' /etc/passwd  # 输出第二行
awk -F: 'NR>2{print}' /etc/passwd  # 输出行号大于2的行awk -F: 'NR==2||NR==4{print}' /etc/passwd  # 输出行号等于2或者等于4的行
awk -F: '$7~/bash/&&$3<=500{print}' /etc/passwd  # 第7列包含bash并且第三列小于等于500的行awk -F: 'BEGIN{print "User\tUid\tHome"}{print $1"\t"$3"\t"$6}END{print "Total: "NR}' user
User	Uid	Home
root	0	/root
bin	1	/bin
daemon	2	/sbin
adm	3	/var/adm
lp	4	/var/spool/lpd
Total: 5# 统计ip访问次数
awk '{a[$1]++}END{for(i in a){print i"\t"a[i]}}' /var/log/nginx/access.log

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

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

相关文章

node res.end返回json格式数据

使用 Node.js 内置 http 模块的createServer()方法创建一个新的HTTP服务器并返回json数据&#xff0c;代码如下&#xff1a; const http require(http);const hostname 127.0.0.1; const port 3000;const data [{ name: 测试1号, index: 0 },{ name: 测试2号, index: 1 },…

PhpWord导入试卷

规定word导入格式 1、[单选题][2024][一般]题目1 A.选项1 B.选项2 C.选项3 D.选项4 答案&#xff1a;D 试题图片&#xff08;上传多媒体图片&#xff09;&#xff1a; 分数&#xff1a;2 答案解析&#xff1a; 2、[多选题][2024][困难]题目2 A.选项1 B.选项2 C.选项3 D.选项4 E…

[计算机效率] 格式转换工具:格式工厂

3.14 格式转换工具&#xff1a;格式工厂 格式工厂是一款功能强大的多媒体格式转换软件&#xff0c;可以实现音频、视频、图片等多种格式的转换。它支持几乎所有类型的多媒体格式&#xff0c;包括视频、音频、图片、字幕等&#xff0c;可以轻松实现格式之间的转换&#xff0c;并…

分发饼干(C++ 贪心)

目录 题目需求 贪心算法思想 什么是贪心 贪心算法的使用 贪心算法的优缺点 代码实现 后言 题目需求 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&…

基本环境搭建指南

前端相关 Nodejs 官网下载&#xff1a;https://nodejs.cn/ 网盘下载&#xff1a;https://yun.mllt.cc/s/Rvtm 数据库相关 MySQL https://dev.mysql.com/downloads/mysql/5.7.html navcat https://navicat.com.cn/products redis 官网下载&#xff1a;https://redis.io/docs/ins…

python-文件操作常用功能-2

目录 列出子目录 获取文件属性 列出子目录 如果要列出子目录而不是文件&#xff0c;请使用下面的方法。现在展示如何使用 os.listdir() 和 os.path() : import osbasepath my_directoryfor entry in os.listdir(basepath):if os.path.isdir(os.path.join(basepath,entry)):…

手写红黑树【数据结构】

手写红黑树【数据结构】 前言版权推荐手写红黑树一、理论知识红黑树的特征增加删除 二、手写代码初始-树结点初始-红黑树初始-遍历初始-判断红黑树是否有效查找增加-1.父为黑&#xff0c;直接插入增加-2. 父叔为红&#xff0c;颜色调换增加-3. 父红叔黑&#xff0c;颜色调换&am…

C++ Primer 总结索引 | 第十二章:动态内存

1、到目前为止&#xff0c;我们编写的程序中 所使用的对象 都有着严格定义的生存期。全局对象 在程序启动时分配&#xff0c;在程序结束时 销毁。对于 局部自动对象&#xff0c;当我们进入 其定义所在的程序块时被创建&#xff0c;在 离开块时销毁。局部static对象 在第一次使用…

Qt_Note20_QML_自定义Grid控件与OpacityMask的使用

import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Controls 2.12 import QtGraphicalEffects 1.14Window {visible: truewidth: 640height: 480title: qsTr("Hello World")// 自定义Grid控件与OpacityMask的使用Grid {id: gridwidth: 15height: 200co…

在线教育平台项目总结

一、业务流程 1.企业&#xff08;B&#xff09; 内容管理、媒资、缓存、消息、任务调度、搜索 2.个人&#xff08;C&#xff09; 搜索、缓存、订单、支付、学习 二、关键技术 1.缓存三兄弟&#xff1a; 缓存穿透&#xff0c;高并发请求过来之后&#xff0c;查询数据库中存…

升降梯人数识别摄像机

升降梯人数识别摄像机是一种智能监测设备&#xff0c;主要用于实时识别和计算升降梯内乘客的数量。通过搭载先进的图像识别技术和人工智能算法&#xff0c;该设备可以准确监测乘客进出数量&#xff0c;提供重要数据支持和信息反馈&#xff0c;帮助管理人员有效管理升降梯运行&a…

STM32学习和实践笔记(4): 分析和理解GPIO_InitTypeDef GPIO_InitStructure (a)

深入分析及学习一下上面这一段代码的构成与含义。 首先&#xff0c;这个GPIO_InitTypeDef GPIO_InitStructure;其实与int a 是完全类似的语法格式以及含义。 GPIO_InitStructure就相当于a这样一个变量。不过从这个变量的名字可以知道&#xff0c;这是一个用于GPIO初始化的结构…

界面控件DevExtreme JS ASP.NET Core 2024年度产品规划预览(一)

在本文中我们将介绍今年即将发布的v24.1附带的主要特性&#xff0c;这些特性既适用于DevExtreme JavaScript (Angular、React、Vue、jQuery)&#xff0c;也适用于基于DevExtreme的ASP.NET MVC/Core控件。 注意&#xff1a;本文中列出的功能和特性说明官方当前/预计的发展计划&a…

hcip实验4:gre mgre ppp综合实验

实验拓扑: 实验目的&#xff1a; 1.R5为ISP&#xff0c;只能进行IP地址配置&#xff0c;其所有地址均配为公有IP地址 2.R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方&#xff1b;R2与R5之间使用ppp的CHAP认证&#xff0c;R5为主认证方;R3与R5之间使用HDLC封装; 3.R1、R…

MQ消息队列详解以及MQ重复消费问题

MQ消息队列详解以及MQ重复消费问题 1、解耦2、异步调用3、流量削峰4、MQ重复消费问题&#xff0c;以及怎么解决&#xff1f;4.1、重复消费产生4.2、解决方法&#xff1a; https://blog.csdn.net/qq_44240587/article/details/104630567 核心的就是&#xff1a;解耦、异步、削锋…

当面试官问你插入排序算法,你敢说自己会吗?

算法学习的重要性 在程序员的世界里&#xff0c;算法就如同一座桥梁&#xff0c;连接着问题与解决方案&#xff0c;是实现优秀程序的关键。 掌握算法&#xff0c;就能够在面对各种问题时&#xff0c;找到最合适的解决方法&#xff0c;以最少的时间和空间&#xff0c;实现最优的…

解析基础设施即代码:重新定义云管理

由于现代架构、应用程序接口和相互关联的服务之间的互联性越来越强&#xff0c;云基础设施的复杂性也与日俱增。随着需要管理的云资源数量不断增加&#xff0c;企业开始采用基础设施即代码&#xff08;IaC&#xff09;来解决云应用的复杂性和相互依赖性问题。 IaC 提供各种工具…

《深入探索 Netty 框架:构建高效稳定的网络应用》

大家好&#xff0c;今天我将为大家深入介绍 Netty 框架&#xff0c;并分享一些基于 Java 实现的代码示例。 Netty 是一个非常强大的网络框架&#xff0c;它提供了一种高效、可靠的方式来构建网络应用程序。它具有以下优点&#xff1a; 高性能&#xff1a;通过优化的 IO 处理和线…

波长可调激光器中的增益芯片和SOA

----翻译自SATO Kenji&#xff0c;ZHANG Xiaobo于2019年发表的文章 摘要&#xff1a; 本文讨论了用于波长可调激光器&#xff08;TL&#xff09;的半导体光放大器&#xff08;SOA&#xff09;和增益芯片的设计规则。即与常规SOA或激光器相似&#xff0c;也有一些不同之处。位…