1. 管道和重定向

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

$ ls /usr/local/dir-name  > /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, -n /etc/group
root:x::
bin:x::
daemon:x::
sys:x::
adm:x:: .............
root@javis:~$ sort -t: -k3, /etc/group
root:x::
bin:x::
wheel:x::
users:x::
boss:x::boss
mysql:x:: .................

(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
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/shutdown

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

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

root@javis:~$ wc /etc/passwd
/etc/passwd

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

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

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

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

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

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

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

root@javis:~$ date | tee date.txt | wc -l

UNIX/Linux系统管理技术手册(1)----脚本和shell的更多相关文章

  1. UNIX/Linux系统管理技术手册(2)----bash脚本编程

    1. 一个简单的例子: $ vim readname.sh #file:readname.sh#!/bin/bash echo -n "Enter your name: " rea ...

  2. Unix/Linux系统管理技术手册学习笔记——shell

    创建日期:2016/02/29 更新日期:2016/02/29 shell变量赋值时不能在等号两边留空白,否则shell会把变量名误认为是命令名 双引号括起来的变量可以进行替换(用*和?这样的文件名匹 ...

  3. UNIX/Linux系统管理技术手册(3)----bash 数组和算术运算

    复杂的数据结构和计算不是 bash 的特长.但它的确至少提供了数组和算术运算. 1.算术运算 所有的 bash 变量的值都是字符串,所以 bash 在赋值的时候并不区分数字 1 和 字符串 " ...

  4. Linux系统管理技术手册——第6章 添加新用户

    6.1/etc/passwd文件 用户登录时Linux识别用户的文件/etc/passwd /etc/passwd包括7个字段: 登录名(不超过32位,使用NIS系统后不超过8位) 经过加密的口令或口 ...

  5. ./ . 和#!/bin/bash 辨析Linux如何选择当前执行脚本的shell

    最近遇到一个有趣的问题,让我搞清楚Linux如何选择当前执行脚本的shell 执行cts的的 media stress test 需要安装 android-cts-media-1.0.zip 把这个文 ...

  6. Unix/Linux环境C编程入门教程(39) shell命令之系统管理

    df命令 用于检测文件系统的磁盘空间占用和空余情况,可以显示所有文件系统对节点和磁盘块的使用情况.命令的使用格式如下: df  [选项] 常用参数及含义如下表所示. df -a:显示所有文件系统的磁盘 ...

  7. Unix/Linux环境C编程入门教程(38) shell命令进阶演示

     1.w命令 该命令也可以查看登录当前系统的用户信息.与who命令相比,w命令的功能更强大,它不但可以显示当前有哪些用户登录到系统,还可以显示这些用户正在进行的操作,并给出更加详细和科学的统计数据 ...

  8. Unix/Linux环境C编程入门教程(37) shell常用命令演练

     cat命令 cat命令可以用来查看文件内容. cat [参数] 文件名. grep-指定文件中搜索指定字符内容. Linux的目录或文件. -path '字串' 查找路径名匹配所给字串的所有文件 ...

  9. Unix/Linux环境C编程新手教程(37) shell经常使用命令演练

     cat命令 cat命令能够用来查看文件内容. cat [參数] 文件名称. grep-指定文件里搜索指定字符内容. Linux的文件夹或文件. -path '字串' 查找路径名匹配所给字串的全部 ...

随机推荐

  1. Linux命令-关机命令:shutdown

    shutdown -h now 现在马上关机 shutdown -h : 晚上8:30定时关机shutdown -r now 现在马上重起shutdown -r 20:30 晚上8:30定时重起 ca ...

  2. JS 与 OC 交互

    WebView与JS的几种交互 IOS中 使用JavaScriptCore 实现OC与JS的交互 JavaScriptCore 使用

  3. java中引用

    java中引用分为,强,弱,虚,软 (1)强引用 使用最普遍的引用.如果一个对象具有强引用,它绝对不会被gc回收.如果内存空间不足了,gc宁愿抛出OutOfMemoryError,也不是会回收具有强引 ...

  4. 在win7系统设置SQL Server2014 express为远程数据

    如何设置远程访问到SQLserver服务器(局域网内的设置) 1.首先,使用Windows+R键 输入services.msc 打开本地服务. *说明:①MSSQLSERVER是正式使用的SQL创建实 ...

  5. java中+=与+的区别

    public class QQ { public static void main(String[] args) throws ParseException { byte val1 = 5; doub ...

  6. 利用partial关键字声明分部类和分部方法

    一.分部类 1.分部类的定义:简单的说,分部类就是把一个类拆分成多个类,每个类文件只包含其中的一部分,类.结构.接口.方法都可以拆分,在定义的时候加上partial修饰符. 注意:分部类必须属于同一命 ...

  7. js函数声明提升与变量提升

    变量提升 变量提升: 在指定作用域里,从代码顺序上看是变量先使用后声明,但运行时变量的 “可访问性” 提升到当前作用域的顶部,其值为 undefined ,没有 “可用性”. alert(a); // ...

  8. java中Map转化为bean

    Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值,在java编程中会经常用到.但是当我们进行业务逻辑的处理或着操作数据库时,往往应用的是我们自己定义的的Bean或VO来传递和 ...

  9. php添加mysql.so扩展

    1.软件包安装 yum install php-mysql 安装的是mariadb的扩展 yum install php-mysqlnd 安装的是mysql的扩展

  10. 解决C#中dynamic类型作为泛型参数的反射问题

    C#中dynamic类型作为泛型参数传递过去后,反射出来的对象类型是object,我用老外的这篇博文中的代码跑起来,得出的结果是:Flying using a Object map (a map),将 ...