Shell脚本的通配符和特殊符号

通配符:

符号

意义

*

0到无穷个任意字符

?

一个任意字符

[]

如[abcd]表示a,b,c,d中任意一个

[-]

在编码顺序内的所有字符,如[0-9]表示0到9间的数字

[^]

反向选择,如[^abc]表示非a,b,c的其它字符

特殊符号:

符号

内容

|

管线:分割两个管线命令的界定

&

工作控制:将指令变为后台运行

>,>>

数据流重导向:输出导向,分别是“取代”与“累加”

<,<<

数据流重导向:输入导向

(1)数据流重导向:将某个指令执行后应该出现在屏幕上的数据(stdout/stderr)传输到其它地方

  • 标准输入(0):使用<或<<
  • 标准输出(1):使用>或>>
  • 标准错误(2):使用2>或2>>(不写数字默认为1)

例子

例1:
    ll / > ~/rootfile    #输出根目录内容到文件
        >:如果文件不存在则创建,存在则覆盖
        >>:存在则追加
例2:
    find /home -name .bashrc>list_right 2>list_error  #将stdout与stderr存到不同的档案
例3:将正确和错误的信息都写入list中
    find /home -name .bashrc>list 2>list  #错误
    find /home -name .bashrc>list 2>&1    #正确
    find /home -name .bashrc &>list       #正确
例4:
    cat > catfile               #用户输入字符,然后保存到catfile中
    cat > catfile < ~/.bashrc   #输入的字符由bashrc提供保存在catfile中(拷贝)
例5:
    cat > catfile << "eof"      #<<代表结束的输入字符,输入eof则结束输入

注意:

  • /dev/null黑洞设备,可以将不需要的信息输出到/dev/null中
find /home -name .bashrc 2>/dev/null  #将错误数据丢弃,正确数据显示到屏幕

(2)管道符号“|”的使用

ls -al /etc|less    #ls的stdout作为less命令的stdin
  • 在"|"后面的指定必须是管线命令(可以接受stdin),如less、more、head、tail
  • 管线命令仅会处理stdout,对于stderr会忽略

常见管道命令例子

1.cut
cut -d '分隔字符' -f fields    #-f为取出第几段,结果下标从1开始
cut -c 字符区间                #以字符为单位取出固定字符区间
例:
    echo $PATH | cut -d ':' -f 5    #取出第5个
    echo $PATH | cut -d ':' -f 3,5  #取出第3与第5个
    export | cut -c 12-             #取出第12个字符后的字符串
    export | cut -c 12-20           #取出12-20的字符串
2.grep
选项:--color=auto 可在结果中高亮关键字
例:
    last | grep 'root'                 #取出有root的行
    last | grep -v 'root'              #取出没有root的行
    last | grep 'root' |cut -d ' ' -f1 #取出有root的行的第一列
3.sort:排序
-t:分割符 -k:以分隔结果的哪个区间排序 -r:反向排序 -f:忽略大小写 -b:忽略最前面的空格 -n以数字排序
例:将帐号进行排序
    cat /etc/passwd | sort
    cat /etc/passwd | sort -t ':' -k 3     #以第三栏排序
    cat /etc/passwd | sort -t ':' -k 3 -n  #上述排序以字符串排序,1会出现在11后面,-n指出按数字排序
4.uniq:去除重复
例:
    last | cut -d ' ' -f1 | sort | uniq [-c]    #去除重复,-c为计数
5.wc:统计
例:
    cat /etc/man.config | wc      #输出的三个数字分别代表:行、字数、字符数
6.tee:作为管道的输入,同时也输出到屏幕
    last | tee last.list          #输出到屏幕和last.list
7.tr:删除或替换文字
-d:删除后面接的字符串  -s:取代重复的字符
例:
    last | tr '[a-z]' '[A-Z]'
    cat /etc/passwd | tr -d ':'   #将结果中的冒号删除

减号-的用途

在管道命令中,会用前一个指令的stdout作为这次的stdin,某些指令需要用到文件名来处理时,该stdin与stdout可以利用减号“-”来代替。例:

tar -cvf - /home | tar -xvf -

  • 用tar打包/home,文件名位置填“-”,打包的数据传送到stdout,则后面的tar的“-”就是前一个指令的stdout。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tilblackout

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值