Shell基础与工具

一、Shell基础

     在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。它类似于DOS下的command和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。

1、history:命令历史

!!:执行上一次命令

     !$:上一命令的最后一个参数

     Ctrl+r:输入关键字查找历史命令

     !number:执行指定命令历史中的指定顺序的命令

     !vi:执行以vi为开头的最近的命令历史中的一条命令

     history -c:清空命令历史【实际就是清空~/.bash_history】

     hsitory n:列出包含history n在内的最近n条命令

2、Tab:补全文件或命令

3、alias:别名,主要用于简化命令

     alias lin='cd /home'

     unalias lin:取消别名

【几个环境配置文件】

     ~/.bashrc:用户的个人的配置文件,重新打开shell就会执行一次。

     ~/.bash_profile:

     ~/.bash_history:

     ~/.bashrc:

     ~/.bash_logout:退出终端时执行

     /etc/profile:所有用户的环境变量的配置文件

     /etc/bashrc:运行bash就会执行

不建议改/etc/bashrc,原因:每打开一个shell就执行一次。做别名这类环境变量的更改时才放入bashrc中。命令的执行一定不要放这里。

4、Shell特殊字符

     *:0个或多个任意字符

     ?:一个任意字符

     #:注释

     \:脱义符号

     ~:用户家目录

     []:任选里面的其一

     $var:引用变量var的值

     ``(反引号):先执行反引号内的命令,并用器结果代替该部分

     >:重定向

     >>追加重定向

     2>:错误重定向

     2>>:错误追加重定向

     <:反向重定向【2.txt < 1.txt:从1中重定向到2】

          ls /data >>1.log 2>&1【追加,&1也是1.log】

     |:将标准输出作为后一个命令的参数

     command &:将前面的命令丢到后台执行

     ;:命令的逻辑行的结束

     &&:与

     jobs:查看后台命令

          jobs -l:详细查看后台命令,显示PID

     Ctrl+z:暂停当前的命令

     fg num:恢复指定num的后台命令到前台

     bg num:将暂停的命令放入后台运行

     Ctrl+c:终止进程

5、变量

     默认系统变量用大写,自定义用小写。

     env:打印出系统的内置的变量

     set:打印出所有的变量,包括自定义的变量

     export a=1:全局变量的声明,声明的变量a在子shell中任然保持有效

     local b=1:局部变量声明,常用户函数中。使函数的变量作用局限于函数内

变量名规则:

     a=1.................. 赋值符号左右不能有空格;

     变量名命名规则同C

     变量的值:有可能需要用''或""包含,注意双引""号中会解析其中的特殊字符

     变量可叠加:a=1;b=$a'123':此时$b为1123

     unset a:取消变量

6、Shell工具包 

     1)cut【剪切】

语法:cut -d':' -f3 文件名【指定分隔符,选择第三段】

          cut  -c4 文件名【选择每行的第4个字符,不能指定分隔符。还可指定区间-c2-10】

     2)sort【排序】

语法:sort [参数] 文件名

参数:

     -n:指定按照数字排序【默认用的是ASCII码】

     -r:reversel反向排序

     -u:(uniq)排序时去除重复

-t':' -k3:指定将文件用指定符号分隔后按某一段排序【-t':' -k3,6:指定3-6段都排序】

     3)wc【统计】

语法:wc [参数] 文件名

参数:

     -l:统计行数

     -m:统计字符数,往往多出一个特殊字符

     -w:统计单词数

     4)uniq【去重】

语法:sort ...|uniq【使用前必须排序】

     uniq -c:输出时显示重复的次数。

     5)tr【从标准输出读取字符(也就是说要用管道),替换一个或多个字符】

语法:tr [参数] 字符串1 字符串2

参数:

     -d:删除字符串1中的所有字符

     -s:删除重复出现的字符序列

     -c:使用字符串1的补集中的字符替换字符串2,要求为ASCII字符集

     空:使用字符串1替换字符串2

     6)split【切割文件】【主要目的是把大文件切小,减少查看时的内存占用】

语法:split [参数] 文件

参数:

     -b5:每个文件5b切割文件

     -l10:每个文件10行切割文件

注意:切割后文件名有规律变化

      7)tee【重定向加标准输出】

语法:输入 | tee 目的文件

二:正则表达式与强大的正则工具


1、正则表达式

正则表达式,又称正规表示法常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

在这纠正一个错误:^表示行的起始位置,$表示行的结束位置

2、grep【过滤】【强烈建议做别名:alias grep='grep --color=auto'】

     语法:grep [参数] [正则表达式] 文件名

     参数:

-v:取反,即过滤出不含正则表达式的行

-c:打印出符合的行数,而不是内容

-n:打印行号

-i:不区分大小写

-q:不输出过滤后的文本结果,只返回真假

-Anum:打印该行及下面的num行

-Bnum:打印该行及上面的num行

-Cnum:打印该行及上面和下面的各num行

grep -r 'root' /etc/*:遍历目录,找出含有正则字符的文件

      示例:

grep '[0-9]':过滤出包含数字的行。[:digit:]:表示所有的数字

grep -v '^#':过滤以'#'开头的行。【'^#':表示以#开头,'3$':表示以3结尾】

grep -v '^$':去除所有空行。

grep '[^[:digit:]]':过滤出所有非数字开头的行。【[^]:表示取反正则表达式】

grep 'ro.t':过滤出所有符合的行,正则的点表示任一字符

     grep的正则符号:
          .:任意一个字符
          *:表示0个或多个前导字符
-E:扩展正则字符
          ?:表示0个人或1个前导的字符。
          +:表示1个或多个前导字符
          ():表示将括号内的部分作为一个整体
          |:表示或者,即符合|左右两边之一的都行

          {}:表示前导符出现的次数【{}内可以是单数字或者范围{2-3}】

3、sed【替换】

     语法:sed [参数]  '/正则表达式/'  文件名【分隔符//也可用##代替】

     参数:

-n:安静模式,和p选项一起输出符合的项目

-i:直接操作文件!!!!!强烈不建议使用,貌似只能在替换时使用

-r:正则表达式不需要脱义

-e:用于连接多个正则表达式,它是一个一个的匹配。也就是可能会出现两次

      表达式命令:

p:打印

d:删除

s:替换

g:全局作用,常与s同用

      示例:

sed '15,$'d /etc/passwd:删除15行及以后的行

sed 's/root/ROOT/g' /etc/passwd:将文件中的小写root全部替换为ROOT

sed -n '/root/p ; /gdm/p' 1.txt:用分好间隔多个正则字段

sed -r 's/(^.*)(:.*:)(\/.*$)/\3\2\1/' /etc/passwd:调换顺序,注意表达式中出现间隔符时必须脱义!

sed的正则符号:

*:表示0个或多个任意字符

.:表示一个任意字符

  -r扩展正则符号:

?:表示

+:表示1个或多个前导字符

():将括号内的字符变为一个整体

3、awk【按段进行操作】

     语法:awk [参数] '正则表达式' 文件名

     参数:

-F:指定分隔符

     示例:

awk -F':' '{print $3'--'$4}' 1.txt:打印指定的段,并在段之间添加普通符号

awk '/root/' 1.txt:过滤指定的字符串root

awk -F':' '$1=="root"' 1.txt:按段精确过滤,数字时不能用引号包围!

awk -F':' '$3=="'$a'"' 1.txt:awk中使用外部变量精确匹配

awk -F':' '$3~/oo/' 1.txt:awk中模糊匹配

awk -F':' '/root/; $1~/lin/; $3~/50/' 1.txt:逗号分隔多个条件。每个条件匹配完再匹配下一条件。有可能会重复...

     条件操作符:

>:大于

>=:大于等于

==:等于

!=:不等于

<=:小于等于

<:小于

awk -F':' '$7!="/sbin/nologin"' 1.txt:

awk -F':' '$3<$4' 1.txt

      awk的逻辑操作符:

&&:并且

||:或者,区别于逗号。过滤后不会出现重复

      awk内置变量:

$0:表示整行

NF:段数

NR:行号

OFS:分隔符

awk -F':' '{print $NF}' 1.txt

      awk特殊操作:

awk -F':' '{if ($1~/root/) print $0}' 1.txt:if条件操作

awk -F':' '$2="abc"' 1.txt:赋值操作,非数值加双引【右值可以是某一段】

awk -F':' '{(sum=sum+$3)}; END {print sum}' 1.txt:awk中定义变量

awk -F':' '$1=="root"&&$1="toor {OFS=':' ; print}"' 1.txt:OFS指定操作后的分隔符,赋值后默认分隔符为空格

你可能感兴趣的:(Shell基础与工具)