bash命令基础及基础特性之一

本篇文章主要讲:命令历史,命令补全,路径补全,命令行展开,命令的执行结果状态,命令别名,glob文件(夹)通配符,bash快捷键,I/O重定向和管道(tr命令讲解)

1、命令历史

  history

  作用:管理命令历史记录

    登录shell时,会读取命令历史文件中记录下的命令:~/.bash_history
    登录进shell后新执行的命令只会记录在缓存中;这些命令会用户退出时“追加”至命令历史文件中

  参数选项:   

    -a: 追加本次会话新执行的命令历史列表至历史文件中
    -d: 删除历史中指定的命令
    -c: 清空命令历史 

  快捷键操作:
    !#: 调用历史中第#条命令;
    !string:调用历史中最近一个以string开头的命令;
    !!: 上一条命令
    !$ 或者先按ESC在按“.”号也可以 【功能是调用上一条命令的参数】

  控制命令历史记录的方式:

    由环境变量"HISTCONTROL"的值决定
      ignoreedups 忽略重复的命令;注意是连续且相同的为重复[默认值]
      ignorespace 忽略所有以空格开头的命令
      ignoreboth 包含了前两者

2、命令补全

  tab键  【前提是用户给定的字符串只有一条且唯一一条相对应的命令  

  bash执行命令方式:
    内部命令:bash自带的命令
    外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命令的文件,第一次找到了即为要执行的命令

3、路径补全

  tab键 【补全方式和命令补全差不多,但原理不一样】 

  把用户给出的字符串当做路径的开头,并在其指定上级目录下搜索一指定的字符串开头的文件名
    如果唯一,则直接补全
    如果不唯一,再次tab键,给出列表

4、命令行展开

  {}

  

举例:mkdir
(1) 如何创建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b, /tmp/x/y2/a, /tmp/x/y2/b
            mkdir -p /tmp/x/{y1,y2}/{a,b}        

(2) 如何创建x_m, y_m, x_n, y_n
            mkdir {x,y}_{m,n}

(3) 如何创建/tmp/bin, /tmp/sbin, /tmp/usr, /tmp/usr/bin, /tmp/usr/sbin
            mkdir -p /tmp/{bin,sbin,usr/{bin,sbin}}

5、命令的执行结果状态 【注意不是命令的返回值】

  命令:# echo $?   0为执行成功;1-255为执行失败

  bash使用特殊变量”$?“ 保存最近一条命令的执行状态结果

6、命令别名

  命令:# alias 

  定义别名:
    (1)alias 不加参数直接使用
       显示当前shell进程所有可使用的命令别名
    (2)alias NAME='VALUES' 定义命令别名
      注意:在命令行中定义的别名,仅对当前shell进程有效;如果想永久有效,则要定义在配置文件中

        配置文件的修改生效范围
          仅对当前用户有效:~/.bashrc
          对所有用户有效:/etc/bashrc
      重新读取配置文件:source /path/to/config——file

  撤销别名

    命令:# unalias  别名名

  【note:如果别名同原命令名称相同,则如果要执行原命令,可以使用"\COMMAND" 】

7、glob文件(夹)通配符

    通配符:  

      *  任意长度的任意字符

        任意单个字符

      []   匹配指定范围内的单个字符

          [1-9]    匹配单个数字

          [a-z]    不区分字母的大小写

          [A-Z] 匹配任意单个大写字符

      ^     匹配指定范围外的字符 

          [^]  匹配指定范围外的单个字符

      特殊字符集:       

        [:digit:]:任意数字,相当于0-9    
        [:lower:]:任意小写字母
        [:upper:]: 任意大写字母
        [:alpha:]: 任意大小写字母
        [:alnum:]:任意数字或字母
        [:space:]:匹配空格字符
        [:punct:]:标点符号

      【注意: ls /mnt/a[[:digit:]]b == ls /mnt/a*b (注意:在使用特殊字符的时候,需要加两个中括号)】

1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
                # ls -d /var/l*[0-9]*[[:lower:]]

2、显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录
                # ls -d /etc/[0-9]*[^0-9]

3、显示/etc/目录下,以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录
                # ls /etc/[^[:alpha:]][[:alpha:]]*
                # ls /etc/[^a-z][a-z]*
4、复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/mageedu目录中
                # cp -a /etc/m*[^0-9] /tmp/mageedu

5、复制/etc目录下,所有以.d结尾的文件或目录至/tmp/magedu.com目录中
                # cp -a /etc/*.d /tmp/magedu.com

6、复制/etc目录下,所以有.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/mageedu.com目录中
                # cp -a /etc/[mnrp]*.conf  /tmp/mageedu.com

8、bash的快捷键

  Ctrl+a   把光标跳转到命令开始处

  Ctrl+e  把光标跳转到命令结尾处

  Ctrl+u  删除命令行首至光标所在处的内容

  Ctrl+k  删除命令行尾至光标所在处的内容

  Ctrl+c  取消命令的执行

  Ctrl+l   相当于clear命令

  q         从文本查阅模式退出至命令行模式

9、I/O重定向

  (1)理解三种输入/输出模式  

    标准输入:keyborad, 0
    标准输出:monitor, 1
    标准错误输出:monitor, 2

  (2)输出重定向 【>,>>】

    命令格式:# COMMAND > NEW_POS, COMMAND >> NEW_POS 

    >:覆盖重定向,目标文件中的原有内容会被清除
    >>: 追加重定向,新内容会追加至目标文件尾部

   

      # set -C: 禁止将内容覆盖输出至已有文件中
      强制覆盖:>|
      # set +C:

    2>: 覆盖重定向错误输出数据流

    2>>: 追加重定向错误输出数据流

标准输出和错误输出各自定向至不同位置
COMMAND > /path/to/file.out 2> /path/to/error.out 

    

    合并标准输出和错误输出为同一个数据流进行重定向:
      &>:覆盖重定向
      &>>:追加重定向     

      COMMAND > /path/to/file.out 2> &1
      COMMAND >> /path/to/file.out 2>> &1

  (3)输入重定向 【<】,一般情况下,输入重定向只使用一个小于号

    tr命令:转换或删除字符    

      tr [OPTION]... SET1 [SET2]

      用法: tr abc  ABC  FILE

         tr  -d "abc"  FILE

  

特殊情况:
#cat < /mnt/date.log HERE Documentation:<< 【注意:<< 一般是创建此处文档的意思,对于输入重定向两个小于号没有意义】
# cat << EOF # cat
> /path/to/somefile << EOF
举例:
[root@oldboy tmp]# cat >date.log<<SS
> aaa
> bbb
> ccc
> SS
[root@oldboy tmp]# cat date.log 
aaa
bbb
ccc
[root@oldboy tmp]# 

10、管道

  语法:COMMAND1 | COMMAND2 | COMMAND3 |...

  【Note:最后一个命令会在当前shell进程的子shell进程中执行】

tee命令:【一路输入产生两路输出,但是tee是覆盖输出的】
tee [OPTION]... [FILE]...

tee命令常用参数
格式:tee
只输出到标准输出,因为没有指定文件
 
格式:tee file
输出到标准输出的同时,保存到文件file中。如果文件不存在,则创建;如果已经存在,则覆盖之
 
格式:tee -a file
输出到标准输出的同时,追加到文件file中。如果文件不存在,则创建;如果已经存在,则在源文件后面追加内容
 
格式:tee -
输出到标准输出两次;如果后面接文件,则会覆盖输出一次。
 
格式:tee file1 file2 -
输出到标准输出两次,同时保存到file1和file2中

猜你喜欢

转载自www.cnblogs.com/l75790/p/9122698.html
今日推荐