第4章 脚本与环境交互
目录
环境变量
在你登录系统时会启动一个超级的父shell,而环境变量就是这个父shell设置的变量。与普通变量不同的是,它们是被export后的变量。
那么export是什么呢?shell中的变量有作用域,在当前shell中赋值(VAR=1
)的变量只能在当前shell中用,如果想在它的子shell中用,需要export,相当于作用域的扩展(有点类似C++的protected成员)。
因此,环境变量就是由系统shell预先设置并export后,给以后的所有子shell用的变量。
运行脚本的方式
因为有了变量作用域,运行脚本的方式就很关键,如果是在子shell中运行则不能继承当前shell中赋值但是没有export的变量;如果是直接在当前shell中执行脚本,则可以继承所有变量。
开一个subshell
sh a.sh
./a.sh
这个要求有可执行权限,其它三个都不需要
在当前shell中运行
source a.sh
(source
命令). ./a.sh
(“点操作符”)
为了验证,只需:在父shell中设置环境变量且不export,在a.sh中打印该环境变量即可
细锁:Shell如何初始化
对于最朴素的sh(即Bourne Shell),在家目录下会有一个.profile
文件,它运行这个文件。
对于其它shell,登入 & 启动一个新终端时分别的情况分别如下,对于我只需关心bash。比如要添加开机自启,只需在以下任意一个文件里加。
Q:zsh是如何做到将默认终端替换为自己的?
⭐处理命令行参数
shell有几个特殊的变量保存了命令行信息
$#
参数个数$1,$2,...,$9
(没有$10
!),依次保存了9个参数$0
脚本的名字
让脚本“可执行”
复习:文件权限
|
|
列出文件权限时,一共9个字母,分三组,分别是所有者、所属组、其它所有用户的权限。
chmod
命令可以改变文件/文件夹权限
设置Magic Line
就是#!
,指定了这个文本文件应该被什么程序执行,比如#!/bin/sh
文件
脚本被设计出的初衷就是为了处理文件。