美文网首页
【linux】shell 脚本相关知识

【linux】shell 脚本相关知识

作者: 鸦言 | 来源:发表于2020-07-15 19:38 被阅读0次

    基础知识

    !:记录命令历史

    tab:命令补全

    alias:将长指令赋予别名,方便调用。

    管道符(|):把前面的命令运行的结果丢给后面的命令

    Ctrl + z:暂停一个进程

    fg:回复暂停的命令

    bg:是暂停的命令后台运行

    Ctrl + c:终止一个进程

    [ ]:如果是数字的话就用[0-9]这样的形式,当然有时候也可以用这样的形式[15]即只含有1或者5,注意,它不会认为是15。如果要过滤出数字以及大小写字母则要这样写[0-9a-zA-Z]。另外[ ]还有一种形式,就是[^字符] 表示除[ ]内的字符之外的字符。

    通配符:

    1. “*” 匹配零个或多个字符
    2. “?” 匹配一个字符
    3. “#” 注释掉后面的内容
    4. “\” 转义字符
    5. “|” 管道符,文档操作等,将前面命令的结果丢给后面的命令
    6. “$” 变量前面的标识符
    7. “!” 上条命令中最后一个 “东西” 赋值给 “!

    字符串的操作

    grep:过滤一个或多个字符

    筛选出含有 root 的行:

    cat /etc/passwd |grep root
    
    root:x:0:0:root:/root:/bin/bash
    

    cut:截取一段字符

    cut -d “分隔字符” [-cf] n 这里的n是数字

    -d :后面跟分隔字符,分隔字符要用双引号括起来
    -c :后面接的是第几个字符
    -f :后面接的是第几个区块

    每一行都根据 “:” 分割,每行输出第一段:

    cat /etc/passwd |cut -d ":" -f 1
    
    root
    daemon
    bin
    sys
    sync
    games
    man
    lp
    mail
    

    sort:用做排序

    sort [-t 分隔符] [-kn1,n2] [-nru] 这里的n1 < n2
    -t 分隔符:作用跟cut的-d一个意思
    -n :使用纯数字排序
    -r :反向排序
    -u :去重复
    -kn1,n2 :由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序

    取前五行,排序:

    head -n5 /etc/passwd |sort
    
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    root:x:0:0:root:/root:/bin/bash
    sync:x:4:65534:sync:/bin:/bin/sync
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    

    取前五行,按:分割后按第 3 块排序:

    head -n5 /etc/passwd |sort -t: -k3n
    
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    sync:x:4:65534:sync:/bin:/bin/sync
    

    下图:取前五行,按:分割后按第 3 块反向排序

    head -n5 /etc/passwd |sort -t: -k3nr
    
    sync:x:4:65534:sync:/bin:/bin/sync
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    root:x:0:0:root:/root:/bin/bash
    

    wc:统计文档的行数、字符数、词数,常用的选项为:

    -l :统计行数
    -m :统计字符数
    -w :统计词数

    利用echo和“>”构建一个文本文件:

    echo "hello world" >123.txt
    cat 123.txt
    hello world
    echo "hello2 world2" >123.txt
    cat 123.txt
    hello2 world2
    echo "hello world" >>123.txt
    echo "hello3 world3" >>123.txt
    cat 123.txt
    hello2 world2
    hello world
    hello3 world3
    
    

    分别对:行、字符和词 计数

    cat 123.txt |wc -l
    3
    cat 123.txt |wc -m
    40
    cat 123.txt |wc -w
    

    uniq:相邻行重复数据进行去重处理

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

    tee :

    后跟文件名,类似与重定向”>”,但是比重定向多了一个功能,在把文件写入后面所跟的文件中的同时,还显示在屏幕上。

    tr :替换字符,常用来处理文档中出现的特殊符号

    如DOS文档中出现的^M符号。常用的选项有两个:
    -d :删除某个字符,-d 后面跟要删除的字符
    -s :把重复的字符去掉
    最常用的就是把小写变大写: tr ‘[a-z]’ ‘[A-Z]’

    cat 123.txt |tr '[a-z]' '[A-Z]'
    
    HELLO2 WORLD2
    HELLO WORLD
    HELLO WORLD
    HELLO3 WORLD3
    HELLO WORLD
    HELLO WORLD
    HELLO WORLD
    HELLO3 WORLD3
    HELLO2 WORLD2
    

    split :切割文档,常用选项

    -b :依据大小来分割文档,单位为byte

    ;:在一行中运行两个或两个以上的命令如何呢?则需要在命令之间加一个”;”了。

    ~:用户的家目录,如果是root则是 /root ,普通用户则是 /home/username

    ~# cd ..
    /# cd ~
    :~# 
    

    & :如果想把一条命令放到后台执行的话,则需要加上这个符号。通常用于命令运行时间非常长的情况。

    使用jobs可以查看当前shell中后台执行的任务。用fg可以调到前台执行。这里的sleep命令就是休眠的意思,后面跟数字,单位为秒,常用语循环的shell脚本中。

    . >, >>, 2>, 2>>:

    前面讲过重定向符号> 以及>> 分别表示取代和追加的意思,然后还有两个符号就是这里的2> 和 2>> 分别表示错误重定向和错误追加重定向,当我们运行一个命令报错时,报错信息会输出到当前的屏幕,如果想重定向到一个文本里,则要用2>或者2>>。

    [ ]:中括号,中间为字符组合,代表中间字符中的任意一个

    && 与 与 ||

    使用”;”时,不管command1是否执行成功都会执行command2;使用”&&”时,只有command1执行成功后,command2才会执行,否则command2不执行;使用”||”时,command1执行成功后command2 不执行,否则去执行command2,总之command1和command2总有一条命令会执行。

    相关文章

      网友评论

          本文标题:【linux】shell 脚本相关知识

          本文链接:https://www.haomeiwen.com/subject/rlcvcktx.html