shell 笔记

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

系统设定
默认输出设备:标准输出 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/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/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 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    952 引用 • 944 回帖
  • Shell

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

    124 引用 • 74 回帖

相关帖子

1 回帖

欢迎来到这里!

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

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

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

推荐标签 标签

  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1441 引用 • 10069 回帖 • 495 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖 • 1 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 16 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 31 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    42 引用 • 130 回帖 • 247 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    89 引用 • 150 回帖
  • Visio
    1 引用 • 2 回帖 • 3 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    5 引用 • 16 回帖 • 2 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 55 关注
  • 大数据

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

    93 引用 • 113 回帖
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    79 引用 • 431 回帖
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 740 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 117 关注
  • OnlyOffice
    4 引用 • 23 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    245 引用 • 1338 回帖
  • 安全

    安全永远都不是一个小问题。

    203 引用 • 818 回帖
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 1 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 757 关注
  • 叶归
    6 引用 • 17 回帖 • 12 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 158 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 631 关注
  • Excel
    31 引用 • 28 回帖 • 1 关注
  • AWS
    11 引用 • 28 回帖 • 10 关注