1、Shell特性
命令历史 history !! !$ !n !字符
Tab键可以补全文件路径或者命令
alias a="b" unalias a
通配符 *匹配零个或多个字符 ?匹配一个字符
输入输出重定向>,>>,<,2>,2>>
管道符
作业控制 ctrl+z jobs fg bg
2、变量
系统变量名都是大写,echo可以查看变量名
env 可以列出当前用户的所有环境变量以及用户自定义全局变量
set 命令可以把所有变量列出来包括系统的和自定义的全局变量以及当前shell自定义变量
linux下设置自定义变量规则:(1)格式为“a=b”,其中a为变量名,b为变量的内容,等号两边不能有空格;(2)变量名只能由英、数字以及下划线组成,而且不能数字开头;(3)当变量内容带有特殊字符(如空格)时,需要加上单引号;(4)如果变量内容中需要用到其他命令运行结果则可以使用反引号;(5)变量内容可以累加其他变量的内容,需要加双引号。
系统所有用户使用变量:export myname=Aming 全局变量,加入/etc/profile并source /etc/profile永 久生效
系统某个用户使用变量:export myname=Aming加入当前用户家目录下的.bashrc中并source .bashrc
export myname=Aming 全局变量,export不加任何选项表示,声明所有的环境变量以及用户自定义变量
用户自定义变量,可以使用unset 变量名 进行解除变量设置
3、系统和个人环境变量的配置文件
/etc/profile PATH,USER,LOGNAME,MAIL,INPUTRC,HOSTNAME,HISTSIZE,umask等
/etc/bashrc $PS1 umask 以后如果设置umask修改/etc/profile,不要改这个文件
.bash_profile 用户自己的环境变量
.bashrc 当用户登录时以及每次打开新的shell时,执行该文件
.bashrc_history 记录命令历史用的
.bash_logout 当退出shell时,会执行该文件
4、shell中的特殊符号
* 匹配符号,0个或多个任意字符
?匹配字符,1个任意的字符
# 注释说明用的,使后面的内容失去原本的意义
\ 脱义字符,将特殊字符还原为普通字符
| 将符号前面命令的结果丢给符号后面的命令,一般针对文档操作的命令比较常用,如cat,less,head
cut,sort,wc,uniq,tee,tr,split,sed,awk等等
$ 引用变量,还有!$
; 分号,多条命令写一行时,分隔命令
~ 用户家目录
& 放到命令最后面,让命令在后台运行
>,>>,2>,2>> [错误]重定向,追加[错误]重定向
[]中括号,中间为字符组合,代表中间字符中的任意一个 ls 1[23a].txt
5、常用命令:
1)cut
语法:cut -d '分隔字符' [-cf] n 这里的n是正整数
-d 后面指定分隔符,用单引号括起来,-f指定第几段 cut -d ':' -f 1 /etc/passwd |head -n 5
-c 后面只有一个数字表示截取第几个字符 head -n2 /etc/passwd|cut -c2
-c 后面跟一个数字区域,表示截取从几到几 head -n2 /etc/passwd|cut -c2-5
2)sort
语法:sort [-t 分隔符] [-kn1,n2] [-nru] (n1<n2)
不加选项,从首字符向后,一次按ASCII码值进行升序sort /etc/passwd
-t 后指定分隔符,-kn1,n2表示在指定的区间中排序,-k后面只跟一个数字表示对第N个字符排序,-n表示使用纯数字排序 sort -t: -k3 -n /etc/passwd
-r表示以降序的形式排序 sort -t: -k3,5 -r /etc/passwd
-u去重 cut -d: -f4 /etc/passwd |sort -n -u
3)wc
用于统计文档的行数、字符数、词数
不加任何选项,会显示行数、词数以及字符数
-l 统计行数 -m 统计字符数 -w统计词数
4)uniq
uniq去重复,最常用就一个-c用来统计重复的行数,去重前要先排序sort testb.txt|uniq -c
5)tee
后跟文件名,类似于>,比重定向多一个功能,在把文件写入后面所跟的文件中的同时,还显示在屏幕
6)tr用来替换字符
最常用的就是大小写转换 head -n2 /etc/passwd |tr '[a-z]''[A-Z]'
tr也可以替换一个字符 grep 'root' /etc/passwd |tr 'r''R'
7)split切割大文件
-b 按大小来分割单位为byte split -b50 1.txt
默认会以xaa,xab,...这样的形式定义分隔后的文件名,也可以指定文件名split -b50 1.txt 123
-l 按行数分隔,split -110 file
6 &&和||
command1;command2前面命令是否执行完成都会执行后面的命令
command1&&command2只有前面命令执行成功才会执行后面命令
command1||command2只有前面命令不成功再去执行后面命令