第十章 认识与学习BASH

这个章节几乎是所有所有指令列模式(command line)与未来主机维护与管理的重要基础

硬件、核心与shell

我们必须透过Shell将我们输入的指令与Kernel沟通,好让Kernel可以控制硬件来正确无误的工作。其实壳程序(shell)只是提供用户操作系统的一个接口,因此,这个壳程序需要可以呼叫其他其他软件才好。

变量的取用与设定:echo 变量设定规则,unset

环境变量的功能

  • HOME

代表用户的家目录。

  • SHELL

告诉我们目前这个环境使用的SHELL是哪只程序

  • HISTSIZE

这个与历史命令有关,亦即是,我们曾今下达过的指令可以被系统记录下来,而记录的笔数则是由这个值来设定的。

  • MAIL

当我们使用mail这个指令在收信时,系统回去读取的邮件信箱文件

  • PATH

就是执行文件搜寻的路径啦,目录与目录中间以:分隔,由于文件的搜寻是依序由PATH的变量内的目录来查询的,所以,目录的顺序也是很重要的

  • LANG

语系数据

  • RANDOM

基本上,在Linux预设的情况中,使用大写字母来设定的变量一般为系统内定需要的变量。


数据流重导向

第十章 认识与学习BASH
我们解析一下,按理来说,当我们使用echo命令的时候,将会将数据输出到屏幕上,但是实际上屏幕却没有打印信息,而是生成了一个b.txt文件,该文件的内容就是原本应该打印在屏幕上的信息.这里.,这些信息其实就是被劫持了(数据流重导向).

数据流重导向符号

符号 内容
> 输出导向,覆盖原本文件中的内容.
>> 输出导向,在源文件原内容后面追加新的内容.
< 输入导向
<< 输入导向,可以指定结束符号.
内容 解释
标准输入 代码为0,使用<或者<<
标准输出 代码为1,使用>或者>>
标准错误输出 代码为2,使用2>或者2>>

管线命令【|】

管线命令仅能处理经由前一个指令传来的正确资讯。
管线命令主要有两个需要主义的地方:

  • 管线命令仅会处理standard output,对于standard error output会忽略
  • 管线命令必须要能够接受来自前一个指令的资料成为standard input继续处理才行。

善用判断式

  • test: 用来检测某些文件或者是相关属性
    例如:要检测 /dmtsai 是否存在时使用:[[email protected] ~]$ test -e /dmtsai
    要想将信息显示出来,使用:[[email protected] ~]$ test -e /dmtsai && echo "exist" || echo "Not exist"
测试的标志 代表的意义
-e 该【档名】是否存在
-f 该【档名】是否存在且为档案(file)
-d 该【档名】是否存在且为目录(directory)
-r 检测该【档名】是否存在且具有【可读】属性
-w 检测该【档名】是否存在且具有【可写】属性
-x 检测该【档名】是否存在且具有【可执行】属性
test -z String 判断字符串是否为0?若String 为空字符串,则为 true
test str1 == str2 判断 str1 是否等于 str2,若相等,则回传true
  • 判断符号 []
    例如,我们想知道 ${HOME} 这个变量是否为空,可以这样:
[[email protected] ~]$ [ -z "$[HOME]" ] ; echo $?

必须注意,中括号的两端必须有空白字元来分隔

  • Shell Script 的预设变量($0, $1)