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 只有前面命令不成功再去执行后面命令
小白学习笔记,不足之处还请大神指正!!