1. 《Classic Shell Scripting》:ls, locate, type, find, df, du, diff, patch

    一.ls

    语法

    ls [ options ] [ file(s) ]
    

    用途

    列出文件目录的内容
    

    主要选项

    -1 : 数字1.强制为单栏输出。在交互式模式下,ls一般会以适于当前窗口的最小宽度,使用多个列
    -a : 显示所有文件,包括隐藏文件(文件名以点号起始的文件)
    -d : 显示与目录本身相关的信息,而非它们包含的文件的信息。
    -F : 使用特殊结尾字符,标记特定的文件类型
    -g : 仅适用于组:省略所有者名称(隐含-l,小写L选项)
    -i : 列出inode编号
    -L : 紧接着符号性连接,列出它们指向的文件
    -l : 小写的L。以冗长形式列出,带有类型,权限保护,所有者,组,字节计数,最后修改时间和文件名
    -r : 倒置默认的排序顺序
    -R : 递归列出,下延进入每个子目录 ...
    Tagged as : Linux Shell
  2. 《Classic Shell Scripting》:文件描述符处理

    在系统内部,UNIX是以一个小的整数数字,称为文件描述符(file descriptors),表示每个进程打开的文件。数字由零开始,至多到系统定义的打开文件数目的限制。传统上,Shell允许你直接处理至多10个打开文件:文件描述符从0至9(POSIX标准将是否可以处理大于9的文件描述符,保留给各实现自行定义,bash可以,但ksh则否)

    文件描述符0,1与2,各自对应到标准输入,标准输出以及标准错误输出。最常见的操作便是变更这三个文件描述符其中一个的位置,不过也可能处理其他的变动。首先来看的是:将程序的标准输出传送到一个文件,并将起标准错误信息传到另一个文件:

    make 1> results 2> ERRS
    

    上面的命令是将make的标准输出(文件描述符为1)传给results,并将标准错误输出(文件描述符为2)传给ERRS。

    make 1> results 2> /dev/null
    

    1> results里的1其实没有必要,供输出重定向的默认文件描述符是标准输出:也就是文件描述符1。下个例子会将输出与错误信息送给相同的文件:

    make > results 2 ...
    Tagged as : Linux Shell
  3. 《Classic Shell Scripting》:sed and cut

    一. sed

    一般来说,执行文本替换的正确程序应该是sed --- 流编辑器(Stream Editor)。sed的设计就是用来以批处理的方式而不是交互的方式来编辑文件。当你知道要做好几个变更 --- 不管是对一个还是数个文件时,比较简单的方式是将这些变更部分写到一个编辑中的脚本里,再将此脚本应用到所有需要修改的文件。 你可能会常在管道中间使用sed,以执行替换操作。做法是使用s命令 --- 要求正则表达式寻找,用替代文本替换匹配的文本:

    sed 's/:.*//' /etc/passwd       #删除第一个冒号之后的所有东西
    sort -u                          #排序列表并删除重复部分
    

    在这里,/字符扮演定界符(delimiter)的角色,从而分隔正则表达式与替代文本。在本例中,替代文本是空的,实际上会有效地删除匹配的文本。虽然/是最常用的定界符,但任何可显示的字符都能作为定界符。在处理文件名称,通常都会以标点符号字符作为定界符(例如分号,冒号或逗点):

    find /home/tolstoy -type d -print    #寻找所有目录
    sed 's;/home ...
    Tagged as : Linux Shell
  4. 《Classic Shell Scripting》:sort, uniq, wc, head, tail

    一.sort

    就像awk,cut与join一样,sort将输入看作具有多条记录的数据流,而记录是由可变宽度的字段组成,记录是以换行符作为定界符,字段的定界符则是空白字符或是用户指定的单个字符。

    语法

    sort [ options ] [ file(s)]
    

    用途

    将输入行按照键值字段与数据类型选项以及locale排序
    

    主要选项

    -b : 忽略开头的空白
    -c : 检查输入是否已正确地排序。如输入未经排序,但退出码(exit code)为非零值,则不会有任何输出
    -d : 字典顺序,仅文字数字与空白才有意义
    -g : 一般数值,以浮点数字类型比较字段
    -f : 将混用的字母都看作相同大小写,也就是以不管字母大小写的方式排序。
    -i : 忽略无法打印的字符
    -k : 定义排序键值字段
    -m : 将已排序的输入文件,合并为一个排序后的输出数据流
    -n : 以整数类型比较字段
    -o outfile : 将输出写到指定的文件,而非标准输出。如果该文件为输入文件之一,则sort在进行排序与写到输出文件之前 ...
    Tagged as : Linux Shell
  5. 《Classic Shell Scripting》第一、二章阅读笔记

    第一章:背景知识

    软件工具的原则

    一次做好一件事
    
    处理文本行,不要处理二进制数据
    
    使用正则表达式:正则表达式(regular expression)是很强的文本处理机制。了解它的运作模式并加以使用,可适度简化编写命令脚本的工作。
    
    默认使用标准输入/输出:在未明确指定文件名的情况下,程序默认会从它的标准输入读取数据,将数据写到它的标准输出,至于错误信息则会传送到标准错误输出。以这样的方式来编写程序,可以轻松地让它们称为数据过滤器(filter)。
    
    避免喋喋不休
    
    输出格式必须与可接受的输入格式一致:专业的工具程序认为遵循某种格式的输入数据,例如标题行之后接着数据行,或在行上使用某种字段分隔符等,所产生的输出也应遵循与输入一致的规则。这么做的好处是,容易将一个程序的执行结果交给另一个程序处理。
    
    让工具去做困难的部分:虽然UNIX程序并非完全符合你的需求,但是现有的工具或许已经可以为你完成90%的工作。接下来,若有需要,你可以编写一个功能特定的小型程序来完成剩下的工作。
    
    构建特定工具前,先想想:你所要做的事情,是否有其他人也需要做?这个特殊的工作是否有可能是某个一般问题的一个特例?如果是的话,请针对一般问题来编写程序。
    

    第二章:入门

    • Shell脚本最常用于系统管理工作,或是用于结合现有的程序以完成小型的,特定的工作。一旦你找出完成工作的方法 ...
    Tagged as : Linux Shell

Page 1 / 1