shell入门总结
*shell特性
shell是一个程序,他能够起到保护内核的做用,咱们能够经过他和内核交互。
用户使用过的命令保存在家目录下的.bash_history文件中,与命令历史有关的!的用法:
!!:表示执行上一个命令
!n:n是数字,表示执行命令历史中第n个命令
!ps:ps是字符串,表示执行命令历史中最近一次以ps开头的命令html
*shell变量
shell变量有系统变量和自定义变量,系统变量是系统自身定义的,通常是不容许更改的;自定义变量使用户,为了更好的管理而定义的变量。
env和set命令均可以显示变量,可是set还能够显示自定义变量。
自定义变量注意:
(1)变量名必须是字母、下划线和数字组成,数字不能在变量名首部,且不能为关键字。
(2)要想全部用户登陆后使用该变量,须要在/etc/profile文件下方添加该变量。
(3)若是只想当前用户使用该变量,则在用户主目录下.bashrc的文件里添加该变量。
(4)定义变量后,须要用export声明下,让该shell的子shell也知道该变量。shell
*系统和用户的环境变量配置文件
/etc/profile:系统的环境变量在这里定义
/etc/profile.d:用户自定义的系统变量
/etc/bashrc:主要定义PS1和umask
下面四个文件在主目录下:
.bash_profile:定义我的的环境信息和路径
.bashrc:定义我的的shell信息
.bash_history: 记录历史命令信息
.bash_logout:退出shell时,执行该文件,能够把一些清理工做放在这个文件中
.bashrc和.bash_profile区别:.bash_profile调用.bashrc,login shells执行.bash_profile;nologin shells执行.bashrc。bash
*shell中的特殊符号
“*”表明零个或多个任意字符
“?”只表明一个任意字符
“+”表明一个或多个任意字符
“#”表明注释符号
“\”脱意符号,后面出现的特殊符号还原成普通符号
“|”管道符,将管道前的结果传递给管道符后面的命令,不是全部的命令均可以使用管道符,通常对文档进行统计的命令均可以。
“$”变量的标识符,而且能够和“!”组合使用,“!$”表明上一条命令的参数。
“;”输入多条命令时的分隔符。
“~”用户的家目录。
“&”执行这个能够把任务放在后台执行。
“>,>>,2>,2>>”重定向符号,>和>>表明取代和追加,2>和2>>表明错误信息取代和追加。
“[ ]”表明中间字符任意一个工具
Linux特殊符号大全:http://www.apelearn.com/bbs/thread-7720-1-1.htmlhtm
*经常使用文档查看工具:cut,sort,tee,uniq,tr,split排序
cut:
-d:后面跟分隔符,用引号括起来
-f:指定第几段
-c:后面只跟数字,表示截取几个字符,可使一个数字,也能够是n1,n2,表示区间n1-n2;也能够是n1,n2,n3。ci
sort:
-t:后面跟分隔符
-n:使用纯数字排序
-r:反向排序
-u:去重复
-kn1,n2:由n1到n2区间排序,也能够写成-kn1,既对n1字段排序
若是使用-nu,sort会把文档中的字母当作0文档
uniq:用来去重
-c:统计重复的行数,并把结果写在结果最前面
使用uniq前,必需要排序,不然无论用字符串
tee:
tee命令相似于重定向,可是比重定向多一个功能,他能够把结果标准输出it
tr:经常使用来替换字符
-d:经常使用来删除字符,后面接须要删除的字符
split:
-b:依据大小来分割文档,单位byte
-l:依据行来分割
使用split分割,源文件还在
*shell中的连接符号
(1)command1;command2:两个命令都执行
(2)command1&&command2:command1执行成功,才执行command2,不然command2不执行
(3)command||command2:command1执行成功,command2不执行,不然command2执行
*grep过滤
语法选项:grep [-cinvABC] 'word' filename
-c:打印符合要求的行数
-n:在输出符合要求的行的时候把行号也输出
-v:打印不符合要求的行
-A:后跟数字,表示打印符合要求的行以及下面两行
-B:后跟数字,表示打印符合要求的行以及上面两行
-C:后跟数字,表示打印符合要求的行以及上下各两行
-r:会把目录下全部文件遍历
-color:把匹配到的关键字用红色标示
实例:
过滤出带有某个关键字的行并输出行号
#grep -n ‘root’ /etc/passwd
过滤出不带某个关键字的行并输出行号
#grep -n -v ‘root’ /etc/passwd
过滤出全部包含数字的行
#grep ‘[0-9]’ /etc/passwd
过滤出全部不包含数字的行
#grep '[0-9]' /etc/passwd
去除以#开头和空的行
#grep -v '^#' /etc/passwd | grep -v '^$'
过滤出英文字母开头的行
#grep '^[a-zA-Z]' /etc/passwd
注:grep不支持+和?,只有egrep支持。
*sed
sed能够实现grep大部分功能,并且还能够查找替换。
sed ‘10’p -n /etc/passwd :是print的意思,-n是打印出符合规则的行,若是不加-n则会把所有打印出来。
sed -n ‘/ro.t/’p /etc/passwd:可使用特殊符号
sed '/root/d' /etc/passwd :删除指定行
sed ‘1,2s/ot/to/g’ /etc/passwd:替换,s是替换的意思,g是全局的意思
head -n2 /etc/passwd | sed -r 's/(root)(.*)(bash)/3\2\1/' :在sed中能够用()表示一个总体,本例子中,调换root和bash的位置
后面的\1\2\3,分别表示第一个括号,第二个括号,以及第三个括号。
使用sed命令不会更改源文件,可是加上-i就会更改源文件。
*awkawk很强大,相对的也很灵活复杂。-F:指定分隔符OFS:指定输出分隔符NF:段数NR:行数实例: 截取文档的某段 #awk -F ‘:’ ‘{print $1}’ /etc/passwd