shell基础知识(二)

8.4 linux shell 中的特殊符号


* 代表零个或多个任意字符

# ls /etc/*.d | tail

/etc/yum.repos.d:
CentOS-Base.repo
CentOS-CR.repo
CentOS-Debuginfo.repo
CentOS-fasttrack.repo
CentOS-Media.repo
CentOS-Sources.repo
CentOS-Vault.repo
epel.repo
epel-testing.repo

?只代表一个任意的字符

# touch 1/1.txt  1/23.txt

# ls 1/?.txt
1/1.txt

注释符号#

#在linux中表示注释说明,即#后面的内容都会被忽略。

# a=1 #1111

# echo $a
1 

脱义字符\

\会将后面的特殊符号(如*)还原为普通字符。

# ls 1/\\\*.txt
ls: 无法访问1/*.txt: 没有那个文件或目录

# ls 1/\*.txt
1/1.txt  1/23.txt

管道符|

|作用是将前面命令的输出作为后面命令的输入。

# ls /etc/\.d | tail

命令cut

cut命令用来截取某一个字段。

语法:cut -d 分割字符 -[cf] n(n表示数字)

  • 参数:
-d		后面跟分割字符,分割字符要用单引号括起来

-c		后面接的是第几个字符 (后面可以是数字,也可以是区间n1-n2)

-f		后面接的是第几块区块(后面与数字间的空格可有可无)
# cat /etc/passwd | cut -d ':' -f 1 | head -5
root
bin
daemon
adm
lp

# cat /etc/passwd | cut -c 5 | head -2
:
x

# cat /etc/passwd |cut -c 1,3,7 |head -2
ro:
bn1

命令sort

sort命令用作排序。

语法:sort -t 分隔符 -kn1,n2 -nru (n1,n2代表数字)

  • 参数:
-t		后面跟分割字符

-n		表示使用纯数字排序

-r		表示反向排序

-u		表示去重复

-kn1,n2		表示由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序

如果sort不加任何选项,则从首字符向后依次按ASCII码值进行比较,最后将它们按升序输出。

# head -n5 /etc/passwd | sort
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash

# head -n5 /etc/passwd | sort -k3,5 -r
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

命令wc

wc命令用于统计文档的行数、字符数或词数(默认会统计换行符)。

  • 参数:
-l		统计行数  
-m		统计字符数  
-w		统计词数  
-L		不统计换行符

如果wc不加任何参数,直接跟文档,则会把行数、词数和字符数依次输出。

# cat 1/1.txt
abc=123 #aaaa
\

# wc 1/1.txt
 2  3 16 1/1.txt

# wc -L 1/1.txt   
13 1/1.txt  

命令uniq

uniq命令用来删除重复的行。

-c 表示统计重复的行数,并把重复行的次数写在前面

使用uniq之前,必须先给文件排序,否则不起作用。

# cat 1/1.txt
111
222
111
333
333

# uniq 1/1.txt
111
222
111
333

# sort 1/1.txt | uniq
111
222
333

# sort 1/1.txt | uniq -c
      2 111
      1 222
      2 333

命令tee

tee命令后面跟文件名,作用类似于重定向>,同时显示在屏幕上。常用于管道符|后面。

# echo "111111" | tee 1/1.txt
111111

# cat 1/1.txt
111111

命令tr

tr命令用于替换字符,常用来处理文档中出现的特殊字符。常用于把小写字母变成大写字母,如tr '[a-z]' '[A-Z]'

  • 参数:
-d		表示删除某个字符,后面跟要删除的字符

-s		表示删除重复的字符  
# head -2 /etc/passwd | tr '[a-z]' '[A-Z]'
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN

命令split

split命令用于切割文档。

  • 参数:
-b		表示根据大小来分割文档,单位为byte

-l		表示根据行数来分割文档

如果split不指定目标文件名,则会以xaa、xab这样的文件名来存取切割后的文档,也可以自己指定文件名。


特殊符号

  • 符号$

符号$ 可以用作变量前面的标识符,与!组合为!$,表示上一条命令中的最后一个变量。

# cat 1/1.txt  
111111  

# ls !$
ls 1/1.txt  
1/1.txt  
  • 符号;

在两条命令之间加上符号;可以在一行中运行多个命令。

# cd 1/ ;cat 1.txt  
111111  
  • 符号~

符号~表示用户的家目录,root用户的家目录是/root,普通用户则是/home/username

  • 符号&

在命令后面加上符号&,可以把命令放到后台运行。

  • 中括号[]

中括号[]内为字符组合,代表字符组合中的任意一个,可以是一个范围(0-9,a-z)。

  • &&||
command1; command2 		使用 ; 时,不管command1是否执行成功,都会执行command2

command1 && command2 	使用 && 时,只有command1执行成功后command2才会执行,否则command2不执行

command1 || command2 	使用 || 时,command1执行成功后则command2不执行,否则执行command2

命令read

read命令后面跟的是变量名,可以是1个,也可以是多个,用空格分隔。回车后,输入的字符就是在给这些变量赋值,输入的字符串也需要用空格分隔,一一对应。

# read a b c
1 2 3

# echo $a
1

# echo $b
2

# echo $c
3

fork, exec, source

  • fork, exec, source的区别:
  1. fork ( /directory/script.sh) :如果shell中包含执行命令,那么子命令并不影响父级的命令,在子命令执行完后再执行父级命令。子级的环境变量不会影响到父级。
    fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本。
    运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候, parent-shell还在。
    sub-shell执行完毕后返回parent-shell。sub-shell从parent-shell继承环境变量.但是sub-shell中的环境变量不会带回parent-shell
  2. exec (exec /directory/script.sh):执行子级的命令后,不再执行父级命令。
    exec与fork不同,不需要新开一个sub-shell来执行被调用的脚本。被调用的脚本与父脚本在同一个shell内执行。但是使用exec调用一个新脚本以后, 父脚本中exec行之后的内容就不会再执行了。这是exec和source的区别
  3. source (source /directory/script.sh):执行子级命令后继续执行父级命令,同时子级设置的环境变量会影响到父级的环境变量。
    与fork的区别是不新开一个sub-shell来执行被调用的脚本,而是在同一个shell中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中得到和使用

相关资料: fork, exec, source的区别


更多资料参考:

sort命令的几个细节问题

shell脚本中echo显示内容带颜色

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值