zoukankan      html  css  js  c++  java
  • shell入门总结

    shell入门总结
    *shell特性
    shell是一个程序,他可以起到保护内核的作用,我们可以通过他和内核交互。
    用户使用过的命令保存在家目录下的.bash_history文件中,与命令历史有关的!的用法:
    !!:表示执行上一个命令
    !n:n是数字,表示执行命令历史中第n个命令
    !ps:ps是字符串,表示执行命令历史中最近一次以ps开头的命令

    *shell变量
    shell变量有系统变量和自定义变量,系统变量是系统自身定义的,一般是不允许更改的;自定义变量使用户,为了更好的管理而定义的变量。
    env和set命令都可以显示变量,但是set还可以显示自定义变量。
    自定义变量注意:
    (1)变量名必须是字母、下划线和数字组成,数字不能在变量名首部,且不能为关键字。
    (2)要想所有用户登录后使用该变量,需要在/etc/profile文件下方添加该变量。
    (3)如果只想当前用户使用该变量,则在用户主目录下.bashrc的文件里添加该变量。
    (4)定义变量后,需要用export声明下,让该shell的子shell也知道该变量。

    *系统和用户的环境变量配置文件
    /etc/profile:系统的环境变量在这里定义
    /etc/profile.d:用户自定义的系统变量
    /etc/bashrc:主要定义PS1和umask
    下面四个文件在主目录下:
    .bash_profile:定义个人的环境信息和路径
    .bashrc:定义个人的shell信息
    .bash_history: 记录历史命令信息
    .bash_logout:退出shell时,执行该文件,可以把一些清理工作放在这个文件中
    .bashrc和.bash_profile区别:.bash_profile调用.bashrc,login shells执行.bash_profile;nologin shells执行.bashrc。

    *shell中的特殊符号
    “*”代表零个或多个任意字符
    “?”只代表一个任意字符
    “+”代表一个或多个任意字符
    “#”代表注释符号
    “”脱意符号,后面出现的特殊符号还原成普通符号
    “|”管道符,将管道前的结果传递给管道符后面的命令,不是所有的命令都可以使用管道符,一般对文档进行统计的命令都可以。
    “$”变量的标识符,并且可以和“!”组合使用,“!$”代表上一条命令的参数。
    “;”输入多条命令时的分隔符。
    “~”用户的家目录。
    “&”执行这个可以把任务放在后台执行。
    “>,>>,2>,2>>”重定向符号,>和>>代表取代和追加,2>和2>>代表错误信息取代和追加。
    “[ ]”代表中间字符任意一个

    Linux特殊符号大全:http://www.apelearn.com/bbs/thread-7720-1-1.html


    *常用文档查看工具:cut,sort,tee,uniq,tr,split

    cut:
    -d:后面跟分隔符,用引号括起来
    -f:指定第几段
    -c:后面只跟数字,表示截取几个字符,可以使一个数字,也可以是n1,n2,表示区间n1-n2;也可以是n1,n2,n3。

    sort:
    -t:后面跟分隔符
    -n:使用纯数字排序
    -r:反向排序
    -u:去重复
    -kn1,n2:由n1到n2区间排序,也可以写成-kn1,既对n1字段排序
    如果使用-nu,sort会把文档中的字母看成0

    uniq:用来去重
    -c:统计重复的行数,并把结果写在结果最前面
    使用uniq前,必须要排序,否则不管用

    tee:
    tee命令类似于重定向,但是比重定向多一个功能,他可以把结果标准输出

    tr:常用来替换字符
    -d:常用来删除字符,后面接需要删除的字符

    split:
    -b:依据大小来分割文档,单位byte
    -l:依据行来分割
    使用split分割,源文件还在

    *shell中的链接符号
    (1)command1;command2:两个命令都执行
    (2)command1&&command2:command1执行成功,才执行command2,否则command2不执行
    (3)command||command2:command1执行成功,command2不执行,否则command2执行

    *grep过滤
    语法选项:grep [-cinvABC] 'word' filename
    -c:打印符合要求的行数
    -n:在输出符合要求的行的时候把行号也输出
    -v:打印不符合要求的行
    -A:后跟数字,表示打印符合要求的行以及下面两行
    -B:后跟数字,表示打印符合要求的行以及上面两行
    -C:后跟数字,表示打印符合要求的行以及上下各两行
    -r:会把目录下所有文件遍历
    -color:把匹配到的关键字用红色标示
    实例:
    过滤出带有某个关键字的行并输出行号
    #grep -n ‘root’ /etc/passwd
    过滤出不带某个关键字的行并输出行号
    #grep -n -v ‘root’ /etc/passwd
    过滤出所有包含数字的行
    #grep ‘[0-9]’ /etc/passwd
    过滤出所有不包含数字的行
    #grep '[0-9]' /etc/passwd
    去除以#开头和空的行
    #grep -v '^#' /etc/passwd | grep -v '^$'
    过滤出英文字母开头的行
    #grep '^[a-zA-Z]' /etc/passwd
    注:grep不支持+和?,只有egrep支持。


    *sed
    sed可以实现grep大部分功能,而且还可以查找替换。
    sed ‘10’p -n /etc/passwd :是print的意思,-n是打印出符合规则的行,如果不加-n则会把全部打印出来。
    sed -n ‘/ro.t/’p /etc/passwd:可以使用特殊符号
    sed '/root/d' /etc/passwd :删除指定行
    sed ‘1,2s/ot/to/g’ /etc/passwd:替换,s是替换的意思,g是全局的意思
    head -n2 /etc/passwd | sed -r 's/(root)(.*)(bash)/321/' :在sed中可以用()表示一个整体,本例子中,调换root和bash的位置
    后面的123,分别表示第一个括号,第二个括号,以及第三个括号。
    使用sed命令不会更改源文件,但是加上-i就会更改源文件。

    *awk
    awk很强大,相对的也很灵活复杂。
    -F:指定分隔符
    OFS:指定输出分隔符
    NF:段数
    NR:行数
    实例:
    截取文档的某段
    #awk -F ‘:’ ‘{print $1}’ /etc/passwd

    When you are lost, follow your heart
  • 相关阅读:
    ECharts之柱状图 饼状图 折线图
    Vue自定义指令(directive)
    HDU 1231 最大连续子序列
    POJ 2533 Longest Ordered Subsequence
    HDU 1163 Eddy's digital Roots
    HDU 2317 Nasty Hacks
    HDU 2571 命运
    HDU 4224 Enumeration?
    HDU 1257 最少拦截系统
    HDU 2740 Root of the Problem
  • 原文地址:https://www.cnblogs.com/andreking/p/4851635.html
Copyright © 2011-2022 走看看