Bash的基础特性(二)

Bash的基础特性(二)

glob文件通配符 (* ; ? ; [ ] ; [^ ] )

  • 星号* 匹配任意所有字符的
    [root@lyp ~]# ls h*
    hello.sh hello.shbak
    ?匹配单个字符
    ls ???? 查看四个字符命名的文件
    [0-9]匹配数字
    [a-z] 字母 字母的顺序安装 a A b B c C… z Z 匹配的a-z
    [A-Z] 字母 字母的顺序安装 a A b B c C… z Z 匹配的A-Z 不要跟符号扩展混淆{A..Z}
    [wang] 匹配列表中的任何的一个字符 ls [wang]* 匹配的是w* a* n* g*
    [^wang] 匹配列表中的所有字符以外的字符 ls [^ab]* 查询除了a或者b开头的文件名

  • 常用几种:
    [:digit:]:任意数字,相当于0-9
    [:lower:]:任意小写字母
    [:upper:] : 任意大写字母
    [:alpha:] : 任意大小写字母
    [:alnum:]:任意数字或字母
    不常用的:
    [:blank:] : 匹配水平空白字符 touch ‘a b’
    [:punct:] : 匹配标点符号 touch ‘a..b’
    [:print:]:可打印字符
    [:cntrl:]:控制(非打印)字符
    [:graph:]:图形字符
    [:xdigit:]:十六进制字符

I/O重定向及管道 ( > ; >> ; 2> ; 2>> ; &> ; &>> . < ; << . | . )

创建文件的时候内核或者内存产生一个记录专门标识这个文件 fd(file descriptor)
生产常见的故障 开发 打开一个文件没有执行关闭操作,文件描述符不停增加,内存可能会满
文件描述符使用完了,这个时候就无法写文件。

三种最常见的文件描述符去标识我们的三个设备
0 标准输入(STDIN) 默认键盘(指令和数据)
1 标准输出(STDOUT) 默认终端(显示器)
2 标准错误输出(STDERR) 默认终端(显示器)

I/O(IN/Out)重定向,指的改变默认输入输出的位置

输出重定向: > ; >>
  • 标准输出重定向: >
[root@lyp test]# date > date.log  [root@lyp test]# cat date.log  Tue Mar 28 01:30:46 CST 2017 
  • 标准输出追加重定向:>>
[root@magedu user]# date >> bash [root@magedu user]# date >> bash [root@magedu user]# cat bash Tue Mar 28 21:48:43 CST 2017 Tue Mar 28 21:48:58 CST 2017 
  • 错误输出重定向: 2>
[root@lyp test]# fdfdfdfd > date.log bash: fdfdfdfd: command not found...
[root@lyp test]# fdfdfdfd 2> date.log [root@lyp test]# cat date.log bash: fdfdfdfd: command not found...
  • 错误输出追加重定向 : 2>>
[root@lyp test]# fdfdfdfd 2>> date.log [root@lyp test]# fdfdfdfd 2>> date.log [root@lyp test]# fdfdfdfd 2>> date.log [root@lyp test]# cat date.log  bash: fdfdfdfd: command not found...
bash: fdfdfdfd: command not found...
bash: fdfdfdfd: command not found...
bash: fdfdfdfd: command not found...
  • &> &>> 将标准输出和标准错误输出(覆盖|追加)同一个文件
[root@lyp test]# date &> date.log [root@lyp test]# cat date.log  Tue Mar 28 01:40:48 CST 2017 [root@lyp test]# date &>> date.log [root@lyp test]# cat date.log  Tue Mar 28 01:40:48 CST 2017 Tue Mar 28 01:41:14 CST 2017 [root@lyp test]# datefdfd &>> date.log [root@lyp test]# cat date.log  Tue Mar 28 01:40:48 CST 2017 Tue Mar 28 01:41:14 CST 2017 bash: datefdfd: command not found...
  • (cal 2004;datefdfd) > date.log
    错误输出到终端;标准输出到date.log中
输入重定向 : <

先通过tr命令来引入输入重定向的含义及应用

  • tr [OPTION]… SET1 [SET2]
    tr ‘a-z’ ‘A-Z’ < /etc/fstab
    -d
    [root@lyp test]# tr ‘a-z’ ‘A-Z’ < /etc/fstab > FSTASB.log
    [root@lyp test]# tr -d ‘0-9’ < /etc/fstab
    -c 取指定字符的补集
    [root@lyp test]# tr -d -c ‘0-9’ < /etc/fstab
    tr -d ‘0-9’ < ./fstab > ./fstab 是不会成功的
    -s “s“ 对重复字符去重
  • HERE Document : <<

    • cat << EOF
    • cat >> beijing.log << EOF
      将标准的输入(下面的字)重定向到beijing.log
      cat >> shanghai.log << ‘EOF’
      where are you from,I’m from $SH
      EOF
      加引号与不加引号的区别:
      加引号(双引号和单引号)输入内容里面的变量是不会被替换;
      不加引号的话 输入的内容里面变量会被替换;
      结束符不一定要使用EOF,可以使用其他任意字符。

写一个脚本 脚本定义个配置文件,执行脚本的时候自动生成自定义的配置文件
#!/bin/bash

cat >> my.cnf << EOF 或者 ‘EOF’
a=b
b=c
echo $SHELL
EOF

管道

  • 管道 :将一个命令的输出结果(标准输出|错误输出)作为另外一个命令输入,连接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流。
    COMMAND1 | COMMAND2 | COMMAND3 | …
  • tee 就类似于三通的管道 ,经常使用tee分向输入 。
    tee -a 对日志文件的追加操作
    ls | tee -a baoding.log | tr ‘a-z’ ‘A-Z’ ;
    生产中:日志输出 | tee -a /tmp/logfile;
    调试生产某个应用的时候,一方面我想要看标准输入的日志,一方面想把日志保存到某个日志文件里便于日后的排查

原创文章,作者:s,如若转载,请注明出处:http://www.178linux.com/72304

(0)
ss
上一篇 2017-04-01
下一篇 2017-04-01

相关推荐

  • N26-第十二周

    1、请描述一次完整的http请求处理过程;        1、建立或处理链接:接收请求或拒绝请求        2、接收请求:接收来自于网络的请求报文中对某资源的一次请求的过程;接收请求的方式通常是并发访问响应模型        3、处理请…

    2017-05-14
  • LVM的创建与管理

    一、基本概念     1、LVM是逻辑盘卷管理(LogicalVolumeManager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。     2、why:通常在安装Linux系统的时候对磁盘进行一盘的分区,一旦日后分区或整个磁盘的空间…

    Linux干货 2016-06-22
  • Linux mdadm命令解析

    mdadm命令解析 一,在Linux系统中目前MD(Multiple Devices)虚拟块设备的方式实现软件RAID,利用多个底层的块设备虚拟出一个新的虚拟设备,并且利用条带化(stripping)技术将数据块均匀分布到多个磁盘上来提高虚拟设备的读写性能,利用不同的数据冗余算法来保护用户数据不会因为某个块设备的故障而完全丢失,而且还能在设备被替换后将丢失的…

    Linux干货 2017-08-31
  • 网络总结

    linux 网络配置 linux的网络服务是由内核提供。 网卡在内核看来就是个设备,各种网络配置不在网卡上。各种配置都是针相应网络管理程序使用的。 不同发行版的网络管理工具也是不一样(net-tools/iproute)。网络服务的管理程序(守护进程)也是不一样(脚本/程序)。 网络管理工具是将用户的设定直接传递给内核的网络服务,及时有效。 很多管理工具可以…

    Linux干货 2016-09-09
  • Bash学习基础知识一“命令”

    Bash 学习基础知识 目录 一、Shell是个啥? 二、BASH的命令     2.1 命令的语法格式     2.2 什么是命令     2.4 命令的类型     …

    Linux干货 2015-04-03
  • 第一周记录

    列出Linux的发行版,描述不同发行版之间的联系与区别。    发行版多达100多种,其中主要的有Debian旗下的Ubuntu、knopix,Slackware旗下的S.u.S.E,RedHat公司旗下的RedHat、CentOS、Fedora。其中各个版本之间的区别:包管理器的区别;但其内核都是Linux内核。 ifconfig: 查…

    Linux干货 2016-08-15

评论列表(1条)

  • renjin
    renjin 2017-04-05 15:44

    主要写了bash的一些基础特性,主要包括重定向的使用,内容很丰富,排版也挺好的