bash的基础特性

    1、命令别名(alias)
        通过alias命令实现:
            (1) alias
                显示当前shell进程所有可用的命别名
            (2) alias NAME='VALUE'
                定义别名NAME,其相当于执行命令VALUE
                
            注意:在命令行中定义的别名,仅对当前shell进程有效,如果先永久有效,要定义在配置文件中
                仅对当前用户:~/.bashrc
                对所有用户有效: /etc/bashrc
                
                Note:编辑配置给出的新配置不会立即生效
                    
                bash进程重新读取配置文件:
                    source /path/to/config_file
                    .  /path/to/config_file
                    
        撤销别名:unalias
            unalias [-a] name [name...]
                    -a 删除全部的别名
                    
        Note:如果别名同原来命令名称,则如果要执行原命令,可使用“\COMMAND”
        
    2、glob(globbing)
        bash中用于实现文件名“通配”
        
        通配符:*, ?, []
        
        (1) *
            任意长度的任意字符
                a*b:
                    aab, ab, a12b, abc
        (2) ?
            任意单个字符
                a?b:
                    aab, ab, a12b, abc
        (3) []
            匹配指定范围内的任意单个字符
                [0-9]
                [a-z]:不区分字符大小写
                [A-Z]:大写字母
            
        (4) [^]
            匹配指定范围外的任意单个字符
                [^0-9]
        
        专用字符集合:
            [:digit:]:任意数字,相当于0-9
            [:lower:]:任意小写字母
            [:upper:]:任意大写字母
            [:alpha:]:任意大小写字母
            [:alnum:]:任意数字或字母
            [:space:]:空格
            [:punct:]:标点符号
            
    练习:
        1、显示/var/目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
            [root@controller var]# ls /var/l*[0-9]*[[:lower:]]            
            /var/l2a  /var/l666b
        2、显示/var/目录下,以任意以为数字开头,且以非数字结尾的文件或目录
            [root@controller var]# touch 78M@adaa
            [root@controller var]# ls /var/[0-9]*[^0-9]
            /var/78M@adaa
        3、显示/var/目录下,以非字母开头,后面跟一个字母及其他任意长度任意字符的文件或目录
            [root@controller var]# ls /etc/[^[:alpha:]][[:alpha:]]*
            [root@controller var]# ls /var/[^a-z]*
            /var/09adfaef@  /var/78M@adaa  /var/88ancnemM
        4、显示/var目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/mageedu目录中
            [root@controller var]# ls /var/m*[^0-9] /tmp/mageedu
            /var/m666.com  /var/m893edu
        5、复制/etc/目录下,所有以.d结尾的文件或目录至/tmp/mageedu.com目录中
            [root@controller ~]# mkdir /tmp/mageedu.com
            [root@controller ~]# cp -r /etc/*.d /tmp/mageedu.com
        6、复制/etc/目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/mageedu.com目录中
            [root@controller ~]# ls /etc/[m,n,r,p]*.conf
            /etc/man_db.conf  /etc/nsswitch.conf  /etc/rsyncd.conf
            /etc/mke2fs.conf  /etc/resolv.conf    /etc/rsyslog.conf
            [root@controller ~]# cp /etc/[m,n,r,p]*.conf /tmp/mageedu.com
        
    3、bash的快捷键
        Ctrl + l:清屏
        Ctrl + a:跳转至命令开始处
        Ctrl + e:跳转至命令结束处
        Ctrl + c:取消命令的执行
        Ctrl + u:删除命令行首是光标所在处的所有内容
        Ctrl + k:删除光标所在处至命令行尾部的所有内容
        
    4、bash的I/O重定向及管道
        程序:指令+数据
            读入数据:Input
            输出数据:Output
            
        打开的文件都有一个fd:file descriptor(文件描述符)
        
        标准输入:keyborad,0
        标准输出:monitor,1
        标准错误输出:monitor,2
        
        I/O重定向:改变标准位置
        
        输出重定向: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
                
        输入重定向:<
            tr命令:转换或删除字符
                tr [OPTION]... SET1 [SET2]
                
            HERE Documentation:<<
                # cat << EOF
                # CAT > /path/to/somefile << EOF
                
    管道:
        COMMAND1 | COMMAND2 | COMMAND3 |...
        
        Note:最后一个命令会在当前shell进程的子shell进程中执行
        
        tee命令:
            tee [OPTION]... [FILE]...
            显示程序的输出并将其复制到一个或多个文件中
            
            [root@syh ~]# cat syh.txt  | tee syh.ttt
            qweruiop
            poiurewq
            [root@syh ~]# cat syh.ttt
            qweruiop
            poiurewq

            echo $PATH | tr 'a-z' 'A-Z' | tee syh.txt
            
    练习:
        1、将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中
            [root@syh ~]# head -5 /etc/passwd| tr 'a-z' 'A-Z' >/tmp/passwd.out
        2、将登录至当前系统上用户信息中的后3行的信息转换为大写后保存至/tmp/who.out文件中
            [root@syh ~]# who | tail -n 1 |tr 'a-z' 'A-Z' > /tmp/who.out

文件处理工具:wc, cut, sort, uniq
    
    wc命令:
        wc [OPTION]... [FILE]...
            -l:行
            -w:单词
            -c:字符
            
    cut命令:
        cut [OPTION]... [FILE]...
            -d DELIMITER:指明分隔符
            -f FILEDS:
                #:第#个字段
                #,#:离散的多个字段,例如1,3,6
                #-#:连续的多个字段,例如1-6
                
                混合使用:1-3,7
            --output-delimiter=STRING
            
    sort命令:
        sort [OPTION]... [FILE]...
            -f:忽略字符大小写
            -r:逆序
            -t:字段分隔符
            -k #:以指定字段为标准排序
            -n:以数值大小进行排序
            -u:uniq,排序后去重
            
    uniq命令:
        uniq [OPTION]... [FILE]...
            -c:显示每行重复出现的次数
            -d:仅显示重复过的行
            -u:仅显示不曾重复的行
        
        Note:连续且完全相同方为重复
        
    练习:以冒号分割,取出/etc/passwd文件的第6至第10行,并将这些信息按照第3个字段的数值大小进行排序,最后仅显示的各自的第1个字段
        [root@syh ~]# head /etc/passwd|tail -4|sort -t: -k3 -n| cut -d: -f1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小宏运维有点菜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值