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
  • 相关阅读:
    [转载]SETSOCKOPT IOCTLSOCKET 设置非阻塞SOCKET函数
    [转载]FTP协议详解
    复制控制
    高手的C++学习忠告,虚心学习下~~[转载]
    [转载]Linux中硬链接和软链接的区别和联系
    以太网最小帧长度为什么要64个字节
    [转载]HTTP协议详解
    Netstat命令详解

    将1:N关系的界面上"添加现有****"按钮隐藏掉
  • 原文地址:https://www.cnblogs.com/andreking/p/4851635.html
Copyright © 2011-2022 走看看