shell 笔记

本贴最后更新于 2313 天前,其中的信息可能已经渤澥桑田

系统设定
默认输出设备:标准输出 stdout, 1
默认输入设备:标准输入 stdin, 0
标准错误输出: stderr, 2

I/O重定向
输出重定向: > 覆盖输出
>> 追加输出
2> 错误输出
2>> 错误追加输出
&> 将标准输出和错误输出到同意文件
输入重定向: <
<< here documents ex: cat <<EOF > test.txt
set -C 禁止对已存在的文件使用覆盖重定向 >| 强制覆盖输出


grep正则表达式元字符
.:任意单个字符匹配
[]:指定范围内的单个字符匹配
[^]:制定范围外的单个字符匹配
*:匹配其前0次或任意次
\?:匹配其前字符0次或1次
\{m,n\}:匹配其前的字符至少m次至多n次
.*:匹配任意长度任意字符
^:锚定行首
$:锚定行尾
\<,\b:锚定词首
\>,\b:锚定词尾
\(\):用于分组做后项引用 \1 \2 \3
grep 选项
-i 忽略字符大小写
-v 反向搜索
-o 只显示匹配结果
--color 显示颜色
-E 使用扩展正则表达式
-A 显示匹配结果的后n行
-B 显示匹配结果的前n行
-C 显示匹配结果的上下n行
grep扩展正则表达式
+:匹配其前字符至少1次
分组:
(): 分组 \1 \2 \3
a|b: 匹配a或者b(匹配左边字符串或者右边字符串)

 

逻辑运算:与 &、或 | 、非 !、异或

1:真
0:假


1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0


1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0

脚本在执行时会启动一个子shell进程:
命令行中启动的脚本会集成当前shell环境变量
系统自动执行的脚本(非命令行启动)就需要自我定义需要的各环境变量;


bash变量类型:
环境变量:作用域为当前shell进程及其子进程
export varname=value
本地变量(局部变量)
varname=value : 作用域为整个bash进程
local varname=value :作用域为当前代码段
位置变量
$1, $2, ...
shift
特殊变量
$?: 上一个命令的执行状态返回值
$#: 参数的个数
$*: 参数列表
$@: 参数列表

程序执行,可能有 两类返回值:
程序执行结果
程序状态返回代码(0-255)
0: 正确执行
1-255:错误执行 1,2,127 系统预留

变量名称:
1、只能包含字母,数字和下划线,并且不能以数字开头
2、不应该和系统中已有的环境变量重名
3、最好做到见名知义

撤销变量:
unset varname
export varname

查看当前shell中的变量
set

查看当前shell中的环境变量
printenv, env, export

脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现源程序

shebang:魔数
#!/bin/bash


“”强引用(做变量引用)
‘’弱引用(不做变量替换)

引用变量: ${varname} 括号有时可以省略

条件判断
bash中如何实现条件判断
条件测试类型
整数测试
字符测试
文件测试

条件测试的表达式
[ expression ]
[[ expression ]]
test expression

整数比较:
-eq:测试两个整数是否相等; 比如 $a -eq $b
-ne: 测试两个整数是否不等;
-gt:测试一个数是否大于另一个数
-ge:大于或等于
-lt:测试一个数是否小于另一个数
-le:小于或等于

命令间的逻辑关系:
逻辑与: &&
第一个条件为假时,第二条件不用再判断
第一个条件为真时,第二条件必须再判断
逻辑或: ||


条件判断,控制结构:
if判断条件; then
statement1
statement2
.。。
fi


shell中的算术运算
a=3
b=4
1、let 算术运算表达式
let c=$a+$b
2、$[算术运算表达式]
c=$[$a+$b]
3、$((算术运算表达式))
c=$(($a+$b))
4、expr 算术运算表达式,表达式中个操作数及运算符之间要有空,而且要使用命令引用
c=`expr $a + $b`


文件测试
-e filename 测试文件是否存在
-f filename 测试文件是否为普通文件
-d filename 测试是否为目录
-r filename 测试当前用户对指定文件是否有读取权限
-w
-x

bash测试脚本是否有语法错误
bash -n scripts

exit: 退出脚本
exit #
如何脚本没有明确定义推出状态码,那么最后执行的一条命令的退出码即为脚本的退出码

 

awk打印前3列

cat video.txt | awk -F '/' '{for(i=1;i<=3;i++)printf $i"/"; printf "\n"}' | uniq

grep 匹配IPV4地址

grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" * -R

阿里云centos的yum地址

[base]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/releasever/updates/basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/releasever/extras/basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

 

 

解决selinux审计不通过的问题

yum install setroubleshoot

sealert -a /var/log/audit/audit.log

  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    915 引用 • 931 回帖
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    122 引用 • 73 回帖

相关帖子

1 回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • Xanthus

    似乎写错字了,2 是标准错误输出吧

推荐标签 标签

  • sts
    2 引用 • 2 回帖 • 149 关注
  • 反馈

    Communication channel for makers and users.

    123 引用 • 906 回帖 • 193 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 6 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    108 引用 • 54 回帖
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    18728 引用 • 69951 回帖
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    106 引用 • 152 回帖
  • 音乐

    你听到信仰的声音了么?

    59 引用 • 509 回帖
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    523 引用 • 4581 回帖 • 690 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    51 引用 • 226 回帖 • 1 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    53 引用 • 85 回帖
  • danl
    64 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    89 引用 • 113 回帖
  • CodeMirror
    1 引用 • 2 回帖 • 121 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 561 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 605 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 352 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 549 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    82 引用 • 122 回帖 • 619 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    69 引用 • 190 回帖 • 497 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1083 引用 • 3461 回帖 • 285 关注
  • 笔记

    好记性不如烂笔头。

    304 引用 • 777 回帖
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 511 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    28 引用 • 108 回帖 • 1 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1056 回帖
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 41 关注