1:shell环境
1.1 Shell 环境的组成部分
Shell 环境是一个复杂的运行时环境,它为用户提供了交互式或非交互式的命令执行能力。Shell 环境主要由以下几部分组成:
(1) 环境变量(Environment Variables)
环境变量是全局变量,它们在当前 Shell 会话及其所有子进程中都可用。环境变量通常用于配置系统或程序的行为,例如:
PATH:定义可执行文件的搜索路径。
HOME:用户的主目录路径。
SHELL:当前使用的 Shell 程序路径。
环境变量可以通过 export 命令创建或修改。
(2) 局部变量(Local Variables)
局部变量仅在当前 Shell 会话中有效,不会传递给子进程。局部变量通常用于脚本内部的临时存储。例如:VAR=value
这个变量 VAR 是局部变量,除非使用 export 导出。
、
(3) 函数(Functions)
Shell 允许定义函数,这些函数可以在当前 Shell 会话中重复使用。函数可以定义局部变量,并且可以访问全局变量。例如:
my_function() {
local local_var="Hello"
echo $local_var
}
(4) 别名(Aliases)
别名是命令的简写形式,通常用于简化复杂的命令。别名仅在当前 Shell 会话中有效。
例如:alias ll='ls -l'
(5) Shell 选项(Options)
Shell 提供了许多选项,用于控制其行为。这些选项可以通过 set 命令设置或取消。
例如:
set -x # 打开调试模式,显示命令的执行过程
set +x # 关闭调试模式
(6) 预定义变量(Predefined Variables)
Shell 提供了一些预定义的特殊变量,用于访问特定的信息。例如:
$0:当前脚本或命令的名称。
$1、$2、$@、$*:脚本的参数。
$?:上一个命令的退出状态。
1.2. Shell 环境的初始化
当 Shell 启动时,它会加载一系列的配置文件,这些文件定义了初始的环境变量、别名、函数等。常见的配置文件包括:
全局配置文件:
/etc/profile:为所有用户设置全局环境变量。
/etc/bash.bashrc(对于 Bash):为所有用户设置全局别名和函数。
用户配置文件:
~/.bash_profile 或 ~/.profile:为当前用户设置环境变量。
~/.bashrc:为当前用户设置别名和函数。
这些文件在 Shell 启动时被加载,从而初始化 Shell 环境。
3. Shell 环境的动态性
Shell 环境是动态的,用户可以在运行时修改环境变量、定义新的局部变量、创建函数、设置别名等。这些修改仅对当前 Shell 会话有效,除非将它们写入配置文件。
4. 总结
Shell 环境由以下几部分组成:
环境变量:全局变量,传递给子进程。
局部变量:仅在当前 Shell 会话中有效。
函数:可重复使用的代码块。
别名:命令的简写形式。
Shell 选项:控制 Shell 行为的设置。
预定义变量:特殊变量,用于访问特定信息。
Shell 环境的初始状态由全局和用户配置文件定义,用户可以在运行时动态修改这些设置。
2:shell变量详解
Shell变量从定义者来说主要是系统预定义和用户自己定义组成的,从功能上来讲主要是分为局部变量和环境变量,
1系统预定义和用户自定义
系统预定义:shell加载的全局配置文件(/etc/bashrc)里面预定义的变量(比如$PS1)
用户自定义:用户自己在shell会话中定义的变量
2. 局部变量与环境变量
局部变量:仅在当前 Shell 会话中有效,不会传递给子进程。
环境变量:通过 export 命令导出后,不仅在当前 Shell 会话中有效,还会传递给所有子进程
- 查看所有变量
命令:set
作用:列出shell会话的所有变量,,别名,函数,选项等等,建议用grep辅助查看
4:创建变量
创建局部变量:直接 var=”我是谁” 变量名=变量值即可
创建环境变量:export var=“我是谁”
或者导出已有局部变量为环境变量:export var
5:取消变量
取消变量(不管是局部还是环境变量):unset 变量名
取消环境遍历但是保留局部变量:unset -v 变量名
3:别名详解
别名是linux系统为了方便输出不用很多字符相处的替代方案
举例而言,系统预定义了别名:ll=list -l选项
如果我要列出home目录的所有文件属性
直接:ll /home 而不用 ls -l /home
如果要在shell会话中定义别名
命令:alias 别名=替代的字符
如果要在shell回话中取消别名
命令:unalias 别名
别名的特点
简单性:别名只是一个字符串替换机制,不支持复杂的逻辑或参数处理。
局部性:别名仅在当前 Shell 会话中有效,不会影响其他 Shell 会话。
持久性:通过将别名定义添加到配置文件(如 ~/.bashrc 或 ~/.zshrc),可以使别名在新
Shell 会话中生效。
覆盖性:别名可以覆盖现有的命令,但不会影响原始命令的执行。
如果你看到了这里,你的实力意味着更强了,现在的你完全对系统的基础配置已经有了初步的脉络,不再是之前的无头苍蝇了,万事开头难啊,你已经迈过了踏入linux系统的门槛了,恭喜你,少年。加油,记忆复苏之日指日可待啊(另外点一下赞吧,收藏一下博客吧,关注我一下吧,不要拒绝我,好吗)