zoukankan      html  css  js  c++  java
  • UNIX/Linux系统管理技术手册(1)----脚本和shell

    1. 管道和重定向

    (i) 要让第二条命令只有在第一条命令成功完成之后才执行,可以用一个 && 符号把两条命令隔开。例如:

    $ ls /usr/local/dir-name  2> /dev/null &&  cd /usr/local/dir-name

    该命令表示先 ls /usr/local/ 目录下的 dir-name 文件夹,如果存在这个文件夹,就执行 cd /usr/local/dir-name 命令进入这个文件夹;如果不存在这个目录,则不执行 cd 命令。 ' 2 > /dev/null ' 命令表示将错误信息重定向到 /dev/null ,即不显示错误信息。

     2. 变量和引用

      对于用单引号和双引号括起来的字符串而言,shell以相似的方式处理它们,例外指出在于双引号括起来的变量可以进行替换(用*和?这样的文件名匹配元字符做扩展)和变量扩展。左引号也叫左撇号,对它的处理和双引号类似,但是它们还有其他作用,即能够把字符串的内容按一条shell 命令来执行,并且用该命令的输出来替换这个字符串。例如:

    root@javis:~$ echo "$APACHE_HOME"
    /usr/local/apache2
    root@javis:~$ echo '$APACHE_HOME'
    $APACHE_HOME

    #将 $APACHE_HOME 当做命令来处理,因此出错 root@javis:
    ~$ echo `$APACHE_HOME` bash: /usr/local/apache2: Is a directory

    3.常见的过滤命令

    (i) cut : 把行分成域

      cut 命令从它的输入行中选出若干部分,再打印出来。该命令最常见的用法是提取被限定的若干域。默认的限定符是<Tab>,但是可以用 -d 选项改变这个限定符。 -f 选项指定输出里包含哪些域。

      参考下面介绍的 uniq 命令一节的内容,了解 cut 用法的例子。

    (ii) sort : 将行排序

      sort 命令对输入行进行排序。----到底按照每行的哪些部分(即“关键字”)进行排序,以及进行排序的顺序,都可以做精细的调整。下表给出一些比较常见的选项:

    选项 含义
    -b 忽略开头的空白
    -f 排序不区分大小写
    -k 指定构成排序关键字的列
    -n 按整数值比较域
    -r 颠倒排序的顺序[即逆序排序]
    -t 设定域分隔符(默认的分隔符是空白)
    -u 只输出唯一记录[重复的记录只输出一次]

      下面的命令展示出了数值排序和字典排序的不同之处,默认按字典排序。这两条命令都用了 -t: 和 -k3,3 两个选项,对 /etc/group 文件的内容按照由冒号分隔的第三个域(即组ID)进行排序。第一条命令按照数值排序,而第二条命令按照字母排序:

    root@javis:~$ sort -t: -k3,3 -n /etc/group
    root:x:0:
    bin:x:1:
    daemon:x:2:
    sys:x:3:
    adm:x:4:
    
    .............
    root@javis:~$ sort -t: -k3,3 /etc/group
    root:x:0:
    bin:x:1:
    wheel:x:10:
    users:x:100:
    boss:x:1000:boss
    mysql:x:1001:
    
    .................

    (iii) uniq: 重复行只打印一次

      uniq 命令在思想上和 sort -u 类似,但它有一些 sort 不能模拟的选项: -c 累计每行出现的次数, -d 只显示重复行,而 -u 只显示不重复的行。 uniq 命令的输入必须先排好序,因此通常把它放在 sort 命令之后运行。

      例如,下面的命令显示出:有 3 个用户把 /bin/bash 作为自己的登录 shell,1 个用户把 /bin/sync 作为登录的 shell ,等等:

    root@javis:~$ cut -d: -f7 /etc/passwd | sort | uniq -c
          3 /bin/bash
          1 /bin/sync
          1 /sbin/halt
         39 /sbin/nologin
          1 /sbin/shutdown

    (iv) wc: 统计行数、字数、字符数

      统计一个文件里的行数、字数、字符数是另一项常用的操作,wc(表示 word count , 即字数统计)命令时完成这项操作的一条方面途径。如果不带任何参数运行wc ,它会显示全部 3 种统计结果:

    root@javis:~$ wc /etc/passwd
      45   91 2352 /etc/passwd

    而参数 -l 、-w 、 -c 分别使 wc 输出文件内容的 行数 、字数 、字符数:

    root@javis:~$ wc /etc/passwd -l
    45 /etc/passwd
    root@javis:~$ wc /etc/passwd -w
    91 /etc/passwd
    root@javis:~$ wc /etc/passwd -c
    2352 /etc/passwd

    (v) tee:把输入复制到两个地方

      命令的管道一般都是线性的,但是从中间插入管道里的数据流,然后把一份副本发送到一个文件里,或者送到终端窗口上,也往往会有帮助。用 tee 命令就能做到这一点,该命令把自己的标准输入既发送到标准输出,又发送到在命令行上指定的一个文件里。可以把它想象成水管上接的一个三通。

    例如,下面的命令将 date 的输出值发送到标准输出,并重定向输出到 date.txt 文件:

    root@javis:~$ date | tee ./date.txt
    2016年 07月 19日 星期二 11:37:58 CST

    下面的命令本来应当在标准时输出上有显示,但重定向到 wc 后进行了行数统计,于是在标准输出上没有显示:

    root@javis:~$ date | tee date.txt | wc -l
    1
  • 相关阅读:
    day12——Python高阶函数及匿名函数
    day11——Python函数的一般形式、函数的参数
    day10——Python file操作
    day9——Python复习
    day8——Python if,while,for
    day7——Python的帮助
    day6——Python数据类型
    sqlserver执行sql文件命令(sqlcmd)
    数据库快照、游标、锁
    Linux 下根据进程名kill进程
  • 原文地址:https://www.cnblogs.com/dongling/p/5683902.html
Copyright © 2011-2022 走看看