shell基础 4月8日课程笔记

shell基础


1. shell特性

查看命令历史 

history 


重复上一个命令

!!  


!$  

执行命令历史中第多少条命令

!n

[root@web ~]# !154


执行命令历史中以某个字符开头的命令

  !字符

[root@web ~]# !c #执行命令历史中以c开头的命令


Tab 键可以补全文件路径或者命令


设置别名

alias  a=“b” 

取消别名

unalias a


*:通配符,匹配零个或多个字符


?:匹配一个字符


 >:输入重定向

[root@web chen]# cat /etc/passwd >1.txt


>>:追加

[root@web chen]# echo "123456">>1.txt

 把123456追加到1.txt中


<:反向重定向


2>:错误定向

[root@web chen]# cat wang >2.txt 2>3.txt
[root@web chen]# cat 3.txt

如果cat这个命令执行正确就把结果定向到2.txt,如果不正确就是定向到3.txt中。就是执行cat wang这个命令的

时候不让他出现任何的提示,把所有的提示都全部重定向到对的和错的中去


2>>:错误追加


|:管道符号

就是把管道前面的命令输出作为管道后面命令的输入

[root@web ~]# cat /etc/passwd|less


作业控制 

sleep:制定暂停的时间

sleep 100:休眠100秒


ctrl+z:暂停作业


jobs:查看被暂停或者在后台的运行的任务


fg:恢复暂停或者休眠的任务

当有多个任务的时候,在fg后面更数字几就表示恢复第几个任务,默认是恢复优先级搞的

也就是任务前面带有“+”号的


bg:把暂停的任务放在后台运行起来

 



2. 变量

系统变量名都是大写,echo 可以查看变量名


env 可以列出当前用户的所有环境变量以及用户自定义全局变量


set命令可以把所有变量列出来包括系统的和自定义的全局变量以及当前shell自定义变量,自定义的变量只能在当前shell中生效

linux下设置自定义变量规则: 

(1)格式为 “a=b”, 其中a为变量名,b为变量的内容,等号两边不能有空格;

(2)变量名只能由英、数字以及下划线组成,而且不能以数字开头;

(3)当变量内容带有特殊字符(如空格)时,需要加上单引号;

(4)如果变量内容中需要用到其他命令运行结果则可以使用反引号;

(5)变量内容可以累加其他变量的内容,需要加双引号;


export:声明变量

全局变量,就是系统内所有用户登录后都能使用该变量

具体设置:

(1)在/etc/profile文件的末尾加入export a=cheng

(2)运行source /etc/profile永久生效


用户变量,就是指只对当前用户生效和使用的变量

具体设置:

(1)在用户的主目录下的.bashrc文件末尾加上export a=cheng

(2)运行source .bashrc 生效


export a=cheng是全局变量,export 不加任何选项表示,声明所有的环境变量以及用户自定义变量


取消用户自定义变量

unset 变量名

取消a的变量

[root@web ~]# unset a


3. 系统和个人环境变量的配置文件

/etc/profile文件中预设的变量:

PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umask等 


/etc/bashrc:这个文件主要预设umask和PS1

[root@web ~]# echo $PS1

[\u@\h \W]\$ 

\u:用户

\h:主机名

\W:当前目录

\$:指的是这个”#$“中的一个


PS1可以指定更改这个"[root@web ~]#"的显示

现在更改一下:

PS1='[\h@\u \W] \$'

[root@web ~]#PS1='[\h@\u \W] \$'
[web@root ~] #

注意看“[root@web ~]#”和“[web@root ~] #”的区别,这个就是PS1的作用吧

恢复就这样子写:

[web@root ~] #PS1='[\u@\h \W]\$'
[root@web ~]#


umask :以后如果设置umask修改 /etc/profile 不要改这个文件

.bash_profile :用户自己的环境变量

.bashrc  :当用户登录时以及每次打开新的shell时, 执行该文件 

.bash_history :记录命令历史用的 

.bash_logout :当退出shell时,会执行该文件。 



4. shell中的特殊符号

* :匹配符号,零个或多个任意字符 

? :匹配符号,1个任意的字符

# :注视说明用的,使后面的内容失去原本的意义

\ :脱义字符,将特殊字符还原为普通字符

|:将符号前面命令的结果丢给符号后面的命令,一般针对文档操作的命令比较常用,

   例如cat, less, head, tail, grep, 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 指定第几段 

[root@web ~]#cut -d ':'  -f 1 /etc/passwd |head -n 5

root

bin

daemon

adm

lp

这个是把passwd文件以冒号(:)作为分隔符,显示第一段,然后使用管道来显示前面的5行


-c 后面只有一个数字表示截取第几个字符

head -n2 /etc/passwd|cut -c2

[root@web ~]#head -n2 /etc/passwd|cut -c2
o
i

显示passwd文件的前两行的第2个字符


-c 后面跟一个数字区域,表示截取从几到几

head -n2 /etc/passwd|cut -c2-5

[root@web ~]#head -n2 /etc/passwd|cut -c2-5
oot:
in:x

显示passwd文件的前两行的第2个字符到第5个字符


2)sort用作排序

语法: sort [-t 分隔符] [-kn1,n2] [-nru]  (n1<n2) 

不加选项,从首字符向后,依次按ASCII码值进行升序排序

sort  /etc/passwd 

[root@web ~]#sort /etc/passwd


-t 后指定分隔符,-kn1,n2表示在指定的区间中排序,

-k后面只跟一个数字表示对第n个字符排序,

-n表示使用纯数字排序

sort -t: -k3 -n /etc/passwd

[root@web ~]# sort -t: -k3 -n /etc/passwd

把passwd文件以冒号(:)作为分隔符,并以第3个字段用数字的方式来排序

 

-r 表示以降序的形式排序 

sort -t: -k3,5 -r /etc/passwd

[root@web ~]#sort -t: -k3,5 -r /etc/passwd

把passwd文件以冒号(:)作为分隔符,-k3,5 表示从第3到第5区域间的字符串排序


-u 去重  

cut -d: -f4 /etc/passwd |sort -n -u

[root@web ~]#cut -d: -f4 /etc/passwd |sort -n -u


3)wc

不跟任何选项,直接跟文档会把行数、词数、字符数依次显示

用于统计文档的行数、字符数、词数

不加任何选项,会显示行数、词数以及字符数

-l 统计行数

-m 统计字符数

-w 统计词数


4)uniq

uniq 去重复,最常用就一个 -c 用来统计重复的行数,去重前要先排序

sort /etc/passwd |uniq -c  

[root@web ~]#sort /etc/passwd |uniq -c

查看passwd文件中有哪些是重复出现的行数


5)tee

后跟文件名,类似于>,比重定向多了一个功能,在把文件写入后面所跟的文件中的同时,

还显示在屏幕上,不过tee常用语管道“|”后面。

[root@web chen]#echo "1111" |tee 1.txt 
1111


6)tr 用来替换字符 

最常用的就是大小写转换:

head -n2 /etc/passwd |tr '[a-z]' '[A-Z]' 

[root@web ~]# head -n2 /etc/passwd |tr '[a-z]' '[A-Z]'
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN

把passwd文件中的小写字母全部换成大写


tr 替换一个字符也是可以的 

grep 'root' /etc/passwd |tr 'r' 'R' 

[root@web ~]# grep 'root' /etc/passwd |tr 'r' 'R'
Root:x:0:0:Root:/Root:/bin/bash
opeRatoR:x:11:0:opeRatoR:/Root:/sbin/nologin

把passwd文件中的r小写字母换成大写R


7)split 切割大文件用的

默认会以xaa, xab, …这样的形式定义分隔后的文件名

-b : 按大小来分割单位为byte  

split -b50 passwd

[root@web chen]#split -b50 passwd
[root@web chen]#ls
passwd  xab  xad  xaf  xah  xaj  xal  xan  xap  xar  xat  xav  xax  xaz
xaa     xac  xae  xag  xai  xak  xam  xao  xaq  xas  xau  xaw  xay

指定文件名 

split -b50 1.txt 123 

[root@web chen]#split -b50 passwd 123 
[root@web chen]#ls
123aa  123ac  123ae  123ag  123ai  123ak  123am  123ao  123aq  123as  123au  123aw  123ay  passwd
123ab  123ad  123af  123ah  123aj  123al  123an  123ap  123ar  123at  123av  123ax  123az


-l : 按行数分隔

split -l10 file

[root@web chen]#split -l10 passwd 
[root@web chen]#ls
passwd  xaa  xab  xac

以10行为一块来分passwd文件


6. && 和 ||

command1 ; command2  前面命令是否执行完成都会执行后面命令

command1 && command2 只有前面命令执行成功才会执行后面命令

command1 || command2  只有前面命令不成功再去执行后面命令



            小白学习笔记,不足之处还请大神指正!!

你可能感兴趣的:(history,历史,课程,定向)