这个章节几乎是所有所有指令列模式(command line)与未来主机维护与管理的重要基础
硬件、核心与shell
我们必须透过Shell将我们输入的指令与Kernel沟通,好让Kernel可以控制硬件来正确无误的工作。其实壳程序(shell)只是提供用户操作系统的一个接口,因此,这个壳程序需要可以呼叫其他其他软件才好。
变量的取用与设定:echo 变量设定规则,unset
环境变量的功能
- HOME
代表用户的家目录。
- SHELL
告诉我们目前这个环境使用的SHELL是哪只程序
- HISTSIZE
这个与历史命令有关,亦即是,我们曾今下达过的指令可以被系统记录下来,而记录的笔数则是由这个值来设定的。
当我们使用mail这个指令在收信时,系统回去读取的邮件信箱文件
- PATH
就是执行文件搜寻的路径啦,目录与目录中间以:分隔,由于文件的搜寻是依序由PATH的变量内的目录来查询的,所以,目录的顺序也是很重要的
- LANG
语系数据
- RANDOM
基本上,在Linux预设的情况中,使用大写字母来设定的变量一般为系统内定需要的变量。
数据流重导向
我们解析一下,按理来说,当我们使用echo命令的时候,将会将数据输出到屏幕上,但是实际上屏幕却没有打印信息,而是生成了一个b.txt文件,该文件的内容就是原本应该打印在屏幕上的信息.这里.,这些信息其实就是被劫持了(数据流重导向).
数据流重导向符号
符号 | 内容 |
---|---|
> | 输出导向,覆盖原本文件中的内容. |
>> | 输出导向,在源文件原内容后面追加新的内容. |
< | 输入导向 |
<< | 输入导向,可以指定结束符号. |
内容 | 解释 |
---|---|
标准输入 | 代码为0,使用<或者<< |
标准输出 | 代码为1,使用>或者>> |
标准错误输出 | 代码为2,使用2>或者2>> |
管线命令【|】
管线命令仅能处理经由前一个指令传来的正确资讯。
管线命令主要有两个需要主义的地方:
- 管线命令仅会处理standard output,对于standard error output会忽略
- 管线命令必须要能够接受来自前一个指令的资料成为standard input继续处理才行。
善用判断式
- test: 用来检测某些文件或者是相关属性
例如:要检测 /dmtsai 是否存在时使用:[dmtsai@study ~]$ test -e /dmtsai
要想将信息显示出来,使用:[dmtsai@study ~]$ 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} 这个变量是否为空,可以这样:
[dmtsai@study ~]$ [ -z "$[HOME]" ] ; echo $?
必须注意,中括号的两端必须有空白字元来分隔
- Shell Script 的预设变量($0, $1)