shell 笔记

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

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

    951 引用 • 943 回帖
  • Shell

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

    124 引用 • 74 回帖

相关帖子

1 回帖

欢迎来到这里!

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

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

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

推荐标签 标签

  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 109 关注
  • Solidity

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

    3 引用 • 18 回帖 • 434 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 676 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖
  • OneNote
    1 引用 • 3 回帖 • 1 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 621 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 79 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    151 引用 • 257 回帖
  • danl
    165 关注
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 652 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 5 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 233 回帖 • 4 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖 • 4 关注
  • abitmean

    有点意思就行了

    32 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 534 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 1 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 444 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3195 引用 • 8215 回帖
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 1 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    210 引用 • 2040 回帖
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 391 关注
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 666 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 549 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 736 关注
  • Follow
    4 引用 • 12 回帖 • 11 关注