《LINUX与UNIXSHELL编程指南》005.doc

上传人:hw****26 文档编号:3544653 上传时间:2019-06-04 格式:DOC 页数:12 大小:525KB
下载 相关 举报
《LINUX与UNIXSHELL编程指南》005.doc_第1页
第1页 / 共12页
《LINUX与UNIXSHELL编程指南》005.doc_第2页
第2页 / 共12页
《LINUX与UNIXSHELL编程指南》005.doc_第3页
第3页 / 共12页
《LINUX与UNIXSHELL编程指南》005.doc_第4页
第4页 / 共12页
《LINUX与UNIXSHELL编程指南》005.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、其中“ ”是光标。下载第5章 shell输入与输出在 shell脚 本 中 , 可 以 用 几 种 不 同 的 方 式 读 入 数 据 : 可 以 使 用 标 准 输 入 缺 省 为 键 盘 , 或 者 指 定 一 个 文 件 作 为 输 入 。 对 于 输 出 也 是 一 样 : 如 果 不 指 定 某 个 文 件 作 为 输 出 , 标 准 输 出 总 是和终端屏幕相关联。如果所使用命令出现了什么错误,它也会缺省输出到屏幕上,如果不 想 把 这 些 信 息 输 出 到 屏 幕 上 , 也 可 以 把 这 些 信 息 指 定 到 一 个 文 件 中 。大 多 数 使 用 标 准 输 入 的

2、命 令 都 指 定 一 个 文 件 作 为 标 准 输 入 。 如 果 能 够 从 一 个 文 件 中 读 取 数 据 , 何 必 要 费 时 费 力 地 从 键 盘 输 入 呢 ?本 章 我 们 将 讨 论 以 下 内 容 : 使 用 标 准 输 入 、 标 准 输 出 及 标 准 错 误 。 重 定 向 标 准 输 入 和 标 准 输 出 。 本 章 全 面 讨 论 了 shell对 数 据 和 信 息 的 标 准 输 入 、 标 准 输 出 , 对 重 定 向 也 做 了 一 定 的 介 绍 。5.1 echo 使用 echo命 令 可 以 显 示 文 本 行 或 变 量 , 或 者 把

3、 字 符 串 输 入 到 文 件 。 它 的 一 般 形 式 为 : echo stringecho命 令 有 很 多 功 能 , 其 中 最 常 用 的 是 下 面 几 个 :c 不换行。f 进纸。t 跳格。n 换行。 如 果 希 望 提 示 符 出 现 在 输 出 的 字 符 串 之 后 , 可 以 用 :上 面 的 命 令 将 会 有 如 下 的 显 示 : 如 果 想 在 输 出 字 符 之 后 , 让 光 标 移 到 下 一 行 , 可 以 用 :$ echo “The red pen ran out of ink“还 可 以 用 echo 命 令 输 出 转 义 符 以 及 变 量

4、 。 在 下 面 的 例 子 中 , 你 可 以 让 终 端 铃 响 一 声 , 显 示出 $HOME目 录 , 并 且 可 以 让 系 统 执 行 tty命令 (注 意 , 该 命 令 用 键 盘 左 上 角 的 符 号 , 法 语 中 的 抑 音 符 引 起 来 , 不 是 单 引 号 , )。如果是LINUX系统,那么 .必须使用- n选项来禁止echo命令输出后换行:运 行 时 会 出 现 如 下 输 出 :初涉 shell 的 用 户 常 常 会 遇 到 的 一 个 问 题 就 是 如 何 把 双 引 号 包 含第 5章 shell输入与输出 35下载$ echo -n “What

5、is your name :“必须使用-e选项才能使转义符生效:如果希望在 echo命 令 输 出 之 后 附 加 换 行 , 可 以 使 用 n选项:还可以在 echo语 句 中 使 用 跳 格 符 , 记 住 别 忘 了 加 反 斜 杠 :如果是LINUX系统,那么 .别忘了使用- e 选项才能使转义符生效:(续 )如 果 想 把 一 个 字 符 串 输 出 到 文 件 中 , 使 用 重 定 向 符 号 。 在 下 面 的 例 子 中 一 个 字 符 串 被 重定 向 到 一 个 名 为 myfile的文件中:$ echo “The log files have all been don

6、e“ myfile或 者 可 以 追 加 到 一 个 文 件 的 末 尾 , 这 意 味 着 不 覆 盖 原 有 的 内 容 :$ echo “$LOGNAME carried them out at date“myfile现 在 让 我 们 看 一 下 myfile文 件 中 的 内 容 :到 echo 命 令 的 字 符 串 中 。 引 号 是 一 个 特 殊 字 符 , 所 以 必 须 要 使 用 反 斜 杠 来使 shell忽 略 它 的 特 殊 含 义 。 假 设 你 希 望 使 用 echo命 令 输 出 这 样 的 字 符 串 : “/dev/rmt0”, 那 么 我 们 只 要

7、 在 引 号 前 面 加 上 反 斜 杠 即可:$ echo “/dev/rmt0“ “/dev/rmt0“5.2 read可以使用 read语 句 从 键 盘 或 文 件 的 某 一 行 文 本 中 读 入 信 息 , 并 将 其 赋 给 一 个 变 量 。 如 果 只36 第一部分 shell 下载指 定 了 一 个 变 量 , 那 么 read 将 会 把 所 有 的 输 入 赋 给 该 变 量 , 直 至 遇 到 第 一 个 文 件 结 束 符 或 回 车。它 的 一 般 形 式 为 :read varible1 varible2 .在 下 面 的 例 子 中 , 只 指 定 了 一

8、个 变 量 , 它 将 被 赋 予 直 至 回 车 之 前 的 所 有 内 容 :在 下 面 的 例 子 中 , 我 们 给 出 了 两 个 变 量 , 它 们 分 别 被 赋 予 名 字 和 姓 氏 。 shell将 用 空 格 作 为 变 量 之 间 的 分 隔 符 :如 果 输 入 文 本 域 过 长 , Shell 将 所 有 的 超 长 部 分 赋 予 最 后 一 个 变 量 。 下 面 的 例 子 , 假 定 要 读 取 变 量 名 字 和 姓 , 但 这 次 输 入 三 个 名 字 ; 结 果 如 下 ;在 上 面 的 例 子 中 , 如 果 我 们 输 入 字 符 串 John

9、 Lemon Doe , 那 么 第 一 个 单 词 将 被 赋 给 第 一 个 变 量 , 而 由 于 变 量 数 少 于 单 词 数 , 字 符 串 后 面 的 部 分 将 被 全 部 赋 给 第 二 个 变 量 。在编写 shell脚 本 的 时 候 , 如 果 担 心 用 户 会 对 此 感 到 迷 惑 , 可 以 采 用 每 一 个 read语句只给一 个 变 量 赋 值 的 办 法 :用 户 在 运 行 上 面 这 个 脚 本 的 时 候 , 就 能 够 知 道 哪 些 信 息 赋 给 了 哪 个 变 量 。如果是LINUX系统,那么.别忘了使用“-n ”选项。载 第 5章 she

10、ll输入与输出 37(续)5.3 catcat是 一 个 简 单 而 通 用 的 命 令 , 可 以 用 它 来 显 示 文 件 内 容 , 创 建 文 件 , 还 可 以 用 它 来 显 示 控 制 字 符 。 在 使 用 cat命 令 时 要 注 意 , 它 不 会 在 文 件 分 页 符 处 停 下 来 ; 它 会 一 下 显 示 完 整 个 文 件 。 如 果 希 望 每 次 显 示 一 页 , 可 以 使 用 more命 令 或 把 cat命 令 的 输 出 通 过 管 道 传 递 到 另 外 一 个 具 有 分 页 功 能 的 命 令 中 , 请 看 下 面 的 例 子 :$ ca

11、t myfile | more或$ cat myfile | pgcat命 令 的 一 般 形 式 为 :cat options filename1 . filename2 .cat命 令 最 有 用 的 选 项 就 是 :-v 显 示 控 制 字 符 如 果 希 望 显 示 名 为 myfile的 文 件 , 可 以 用 :$ cat myfile如 果 希 望 显 示 myfile1、 myfile2、 myfile3这 三 个 文 件 , 可 以 用 :$ cat myfile1 myfile2 myfile3如 果 希 望 创 建 一 个 名 为 bigfile的 文 件 , 该 文

12、件 包 含 上 述 三 个 文 件 的 内 容 , 可 以 把 上 面 命 令 的 输 出 重 定 向 到 新 文 件 中 :$ cat myfile1 myfile2 myfile3 bigfile如 果 希 望 创 建 一 个 新 文 件 , 并 向 其 中 输 入 一 些 内 容 , 只 需 使 用 cat命 令 把 标 准 输 出 重 定 向 到 该 文 件 中 , 这 时 c a t 命 令 的 输 入 是 标 准 输 入 键 盘 , 你 输 入 一 些 文 字 , 输 入 完 毕 后 按结 束 输 入 。 这 真 是 一 个 非 常 简 单 的 文 字 编 辑 器 !还 可 以 使

13、 用 cat命 令 来 显 示 控 制 字 符 。 这 里 有 一 个 对 从 DOS机器上 ftp过 来 的 文 件 进 行 检 察 的 例 子 , 在 这 个 例 子 中 , 所 有 的 控 制 字 符 都 在 行 末 显 示 了 出 来 。有 一 点 要 提 醒 的 是 , 如 果 在 敲 入 了 cat以 后 就 直 接 按 回 车 , 该 命 令 会 等 你 输 入 字 符 。 如 果 你 本 来 就 是 要 输 入 一 些 字 符 , 那 么 它 除 了 会 在 你 输 入 时 在 屏 幕 上 显 示 以 外 , 还 会 再 回 显 这 些图5-1 管道38 第一部分 shell

14、下载内 容 ; 最 后 按 结 束 输 入 即 可 。5.4 管道可 以 通 过 管 道 把 一 个 命 令 的 输 出 传 递 给 另 一 个 命 令 作 为 输 入 。 管 道 用 竖 杠 |表 示 。 它 的 一 般形式为:命令 1 | 命令 2 其中 |是 管 道 符 号 。 在 下 面 的 例 子 中 , 在 当 前 目 录 中 执 行 文 件 列 表 操 作 , 如 果 没 有 管 道 的 话 , 所 有 文 件 就 会显 示 出 来 。 当 shell看 到 管 道 符 号 以 后 , 就 会 把 所 有 列 出 的 文 件 交 给 管 道 右 边 的 命 令 , 因 此 管 道

15、的含义正如它的名字所暗示的那样:把信息从一端传送到另外一端。在这个例子中,接下 来 grep命 令 在 文 件 列 表 中 搜 索 quarter1.doc:让 我 们 再 来 用 一 幅 图 形 象 地 讲 解 刚 才 的 例 子 ( 见 图 5-1) :这就是管道Is 命令的输出sed、 awk和 grep都 很 适 合 用 管 道 , 特 别 是 在 简 单 的 一 行 命 令 中 。 在 下 面 的 例 子 中 , who命令 的 输 出 通 过 管 道 传 递 给 awk命 令 , 以 便 只 显 示 用 户 名 和 所 在 的 终 端 。如 果 你 希 望 列 出 系 统 中 所

16、有 的 文 件 系 统 , 可 以 使 用 管 道 把 df命 令 的 输 出 传 递 给 awk命令, awk显 示 出 其 中 的 第 一 列 。 你 还 可 以 再 次 使 用 管 道 把 awk的 结 果 传 递 给 grep命 令 , 去 掉 最 上 面 的题头 filesystem。当 然 , 你 没 准 还 会 希 望 只 显 示 出 其 中 的 分 区 名 , 不 显 示 /dev/部 分 , 这 没 问 题 ; 我 们 只 要 在 后 面 简 单 地 加 上 另 一 个 管 道 符 号 和 相 应 的 sed命令即可。下载 第 5章 shell输入与输出 39在 这 个 例

17、子 中 , 我 们 先 对 一 个 文 件 进 行 排 序 , 然 后 通 过 管 道 输 送 到 打 印 机 。$ sort myfile | lp5.5 teetee命 令 作 用 可 以 用 字 母 T来 形 象 地 表 示 。 它 把 输 出 的 一 个 副 本 输 送 到 标 准 输 出 , 另 一 个 副 本 拷 贝 到 相 应 的 文 件 中 。 如 果 希 望 在 看 到 输 出 的 同 时 , 也 将 其 存 入 一 个 文 件 , 那 么 这 个 命 令 再 合 适 不 过 了 。它 的 一 般 形 式 为 :tee -a files其中, -a表 示 追 加 到 文 件

18、末 尾 。 当 执 行 某 些 命 令 或 脚 本 时 , 如 果 希 望 把 输 出 保 存 下 来 , tee命 令 非 常 方 便 。 下 面 我 们 来 看 一 个 例 子 , 我 们 使 用 who命 令 , 结 果 输 出 到 屏 幕 上 , 同 时 保 存 在 who.out文件中:可以用图 5-2来 表 示 刚 才 的 例 子 。screen who.outwho命令的输出$ who图5-2 tee在 下 面 的 例 子 中 , 我 们 把 一 些 文 件 备 份 到 磁 带 上 , 同 时 将 所 备 份 的 文 件 记 录 在 tape.log文 件 中 。 由 于 需 要

19、 不 断 地 对 文 件 进 行 备 份 , 为 了 保 留 上 一 次 的 日 志 , 我 们 在 tee命 令 中 使 用 了 -a 选项。在 上 面 的 例 子 中 , 第 一 行 末 尾 的 反 斜 杠 告诉 shell该 命 令 尚 未 结 束 , 应 从 下 面 一 行 继 续 读 入该命令。可 以 在 执 行 脚 本 之 前 , 使 用 一 个 echo命 令 告 诉 用 户 谁 在 执 行 这 个 脚 本 , 输 出 结 果 保 存 在如 果 不 想 把 输 出 重 定 向 到 文 件 中 , 可 以 不 这 样 做 , 而 是 把 它 定 向 到 某40 第一部分 shell

20、 下载什么地方。个 终 端 上 。 在 下 面 的 例 子 中 , 一 个 警 告 被 发 送 到 系 统 控 制 台 上 , 表 明 一 个 磁 盘 清 理 进 程 即 将 运 行 。$ echo “stand-by disk cleanup starting in 1 minute“| tee /dev/console可 以 让 不 同 的 命 令 使 用 同 一 个 日 志 文 件 , 不 过 不 要 忘 记 使 用 -a选项。5.6 标准输入、输出和错误当 我 们 在 shell中 执 行 命 令 的 时 候 , 每 个 进 程 都 和 三 个 打 开 的 文 件 相 联 系 , 并

21、使 用 文 件 描 述 符 来 引 用 这 些 文 件 。 由 于 文 件 描 述 符 不 容 易 记 忆 , shell同 时 也 给 出 了 相 应 的 文 件 名 。下 面 就 是 这 些 文 件 描 述 符 及 它 们 通 常 所 对 应 的 文 件 名 :文 件 文件描述符输入文件 标准输入 0输出文件 标准输出 1错误输出文件 标准错误 2系 统 中 实 际 上 有 12个 文 件 描 述 符 , 但 是 正 如 我 们 在 上 表 中 所 看 到 的 , 0、 1、 2是 标 准 输 入 、 输 出 和 错 误 。 可 以 任 意 使 用 文 件 描 述 符 3到 9。5.6.1

22、 标准输入标准输入是文件描述符 0。 它 是 命 令 的 输 入 , 缺 省 是 键 盘 , 也 可 以 是 文 件 或 其 他 命 令 的 输 出 。5.6.2 标准输出标 准 输 出 是 文 件 描 述 符 1。 它 是 命 令 的 输 出 , 缺 省 是 屏 幕 , 也 可 以 是 文 件 。5.6.3 标准错误标 准 错 误 是 文 件 描 述 符 2。 这 是 命 令 错 误 的 输 出 , 缺 省 是 屏 幕 , 同 样 也 可 以 是 文 件 。 你 可 能 会 问 , 为 什 么 会 有 一 个 专 门 针 对 错 误 的 特 殊 文 件 ? 这 是 由 于 很 多 人 喜 欢

23、 把 错 误 单 独 保 存 到 一 个 文 件 中 , 特 别 是 在 处 理 大 的 数 据 文 件 时 , 可 能 会 产 生 很 多 错 误 。如 果 没 有 特 别 指 定 文 件 说 明 符 , 命 令 将 使 用 缺 省 的 文 件 说 明 符 ( 你 的 屏 幕 , 更 确 切 地 说 是 你 的 终 端 ) 。5.7 文件重定向在 执 行 命 令 时 , 可 以 指 定 命 令 的 标 准 输 入 、 输 出 和 错 误 , 要 实 现 这 一 点 就 需 要 使 用 文 件在 上 面 的 例 子 中 , 所 有 的 目 录 名 和 以第 5章 shell输入与输出 41下载

24、重定向。表 5-1列 出 了 最 常 用 的 重 定 向 组 合 , 并 给 出 了 相 应 的 文 件 描 述 符 。在 对 标 准 错 误 进 行 重 定 向 时 , 必 须 要 使 用 文 件 描 述 符 , 但 是 对 于 标 准 输 入 和 输 出 来 说 , 这 不 是 必 需 的 。 为 了 完 整 起 见 , 我 们 在 表 5 -1中 列 出 了 两 种 方 法 。表 5-1 常 用 文 件 重 定 向 命 令command filename 把 标 准 输 出 重 定 向 到 一 个 新 文 件 中 command filename 把 标 准 输 出 重 定 向 到 一

25、个 文 件 中 (追加 ) command 1 fielname 把 标 准 输 出 重 定 向 到 一 个 文 件 中command filename 2&1 把 标 准 输 出 和 标 准 错 误 一 起 重 定 向 到 一 个 文 件 中command 2 filename 把 标 准 错 误 重 定 向 到 一 个 文 件 中command 2 filename 把 标 准 输 出 重 定 向 到 一 个 文 件 中 (追加 )command filename 2&1 把 标 准 输 出 和 标 准 错 误 一 起 重 定 向 到 一 个 文 件 中 (追加 )command file

26、name2 command命令以 filename文 件 作 为 标 准 输 入 , 以 filename2文件 作为标准输出command &m 把 标 准 输 出 重 定 向 到 文 件 描 述 符 m中command sort.out从表 5-1中 可 以 看 出 , 我 们 也 可 以 使 用 如 下 的 表 达 方 式 , 结 果 和 上 面 一 样 :$ cat passwd | awk -F: print $1 | sort sort.out可 以 把 很 多 命 令 的 输 出 追 加 到 同 一 文 件 中 。account开 头 的 文 件 名 都 被 写 入 到 file

27、.out文件中。 如 果 希 望 把 标 准 输 出 重 定 向 到 文 件 中 , 可 以 用 filename。 在 下 面 的 例 子 中 , ls 命 令 的 所有 输 出 都 被 重 定 向 到 ls.out文件中:$ ls ls.out如 果 希 望 追 加 到 已 有 的 文 件 中 ( 在 该 文 件 不 存 在 的 情 况 下 创 建 该 文 件 ) , 那 么 可 以 使 用filename:如 果 想 创 建 一 个 长 度 为 0的 空 文 件 , 可 以 用 filename:$ myfile42 第一部分 shell 下载5.7.2 重定向标准输入可 以 指 定 命

28、 令 的 标 准 输 入 。 在 awk一 章 就 会 遇 到 这 样 的 情 况 。 下 面 给 出 一 个 这 样 的 例 子 :$ sort name.out在 发 送 邮 件 时 , 可 以 用 重 定 向 的 方 法 发 送 一 个 文 件 中 的 内 容 。 在 下 面 的 例 子 中 , 用 户louise将 收 到 一 个 邮 件 , 其 中 含 有 文 件 contents.txt中的内容:$ mail louise /dev/null 这 样 所 有 的 错 误 输 出 都 输 送 到 了 /dev/null, 不 再 出 现 在 屏 幕 上 。 如 果 你 在 对 更 重

29、 要 的 文 件 进 行 操 作 , 可 能 会 希 望 保 存 相 应 的 错 误 。 下 面 就 是 一 个 这 样 的例 子 , 这 一 次 错 误 被 保 存 到 grep.err文件中:第 5章 shell输入与输出 43下载还 可 以 把 错 误 追 加 到 一 个 文 件 中 。 在 使 用 一 组 命 令 完 成 同 一 个 任 务 时 , 这 种 方 法 非 常 有用 。 在 下 面 的 例 子 中 , 两 个 grep命 令 把 错 误 都 输 出 到 同 一 个 文 件 中 ; 由 于 我 们 使 用 了 符号进 行 追 加 , 后 面 一 个 命 令 的 错 误 (如果

30、有的话 )不 会 覆 盖 前 一 个 命 令 的 错 误 。5.8 结合使用标准输出和标准错误一 个 快 速 发 现 错 误 的 方 法 就 是 , 先 将 输 出 重 定 向 到 一 个 文 件 中 , 然 后 再 把 标 准 错 误 重 定 向 到 另 外 一 个 文 件 中 。 下 面 给 出 一 个 例 子 :我 有 两 个 审 计 文 件 , 其 中 一 个 的 确 存 在 , 而 且 包 含 一 些 信 息 , 而 另 一 个 由 于 某 种 原 因 已 经不存在了 (但我不知道 )。 我 想 把 这 两 个 文 件 合 并 到 accounts.out文件中。$ cat acco

31、unt_qtr.doc account_end.doc 1accounts.out 2accounts.err现 在 如 果 出 现 了 错 误 , 相 应 的 错 误 将 会 保 存 在 accounts.err文件中。我 事 先 并 不 知 道 是 否 存 在 account_end.doc文 件 , 使 用 上 面 的 方 法 能 够 快 速 发 现 其 中 的 错误。5.9 合并标准输出和标准错误在 合 并 标 准 输 出 和 标 准 错 误 的 时 候 , 切 记 shell是 从 左 至 右 分 析 相 应 的 命 令 的 。 下 面 给 出 一个例子:$ cleanup clea

32、nup.out 2&1在 上 面 的 例 子 中 , 我 们 将 cleanup脚 本 的 输 出 重 定 向 到 cleanup.out 文 件 中 , 而 且 其 错 误 也 被 重 定 向 到 相 同 的 文 件 中 。$ grep “standard“* grep.out 2&1在 上 面 的 例 子 中 , grep命 令 的 标 准 输 出 和 标 准 错 误 都 被 重 定 向 到 grep.out文 件 中 。 你 在 使 用 前 面 提 到 的 “此 处 ”文 挡 时 , 有 可 能 需 要 把 所 有 的 输 出 都 保 存 到 一 个 文 件 中 , 这 样 万 一 出 现 了 错 误 , 就 能 够 被 记 录 下 来 。 通 过 使 用 2 &1就 可 以 做 到 这 一 点 , 下 面 给 出 一 个 例 子 :上 面 的 例 子 演 示 了 如 何 把 所 有 的 输 出 捕 捉 到 一 个 文 件 中 。 在 使 用 cat命 令 的 时 候 , 这 可 能

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。