Shell Basic
- bash shell 是大多数 Linux 发行版上的默认 shell。如果不是运行在 bash shell 之下,那么可以考虑用以下方式之一对 bash shell 进行实践。
- 使用
chsh -s /bin/bash
命令来改变默认 shell。这一修改将在下一次登录时生效。 - 使用
su - $USER -s /bin/bash
命令创建另一个进程,作为当前 shell 的子进程。新进程将是使用 bash 的登录 shell
2.env
命令如果不带任何选项或参数,就显示当前的环境变量。还可以使用它在定制的环境中执行命令。-i
(或只是 -
)选项在运行命令之前清理当前环境,而 -u
选项清除您不希望传递的环境变量。
3.命令行可以使用单引号,也可以使用双引号。这两种引号之间有一个重要的差异。shell 将双引号(")之间的 shell 变量展开,但是在使用单引号(')时不进行展开。
4.unset VAR1;echo $VAR1
5.历史
- history
- 显示全部历史
- history N
- 显示历史中最后 N 行
- history -d N
- 从历史中删除第 N 行;例如,如果这一行包含密码,就可能需要这么做
- !!
- 最近的命令
- !N
- 第 N 个历史命令
- !-N
- 历史中倒数第 N 个命令(!-1 相当于 !!)
- !#
- 正在输入的当前命令
- !string
- 以 string 开头的最近的命令
- !?string?
-
包含 string 的最近的命令
6.setenv和export都可以将变量导出给子shell.但语法有所不同。
setenv VAR1 var1
export VAR1
注:它们在变量名前都不加$
7.使用命令
set -u
可以针对引用未定义的变量的情况生成一个错误,使用set +u
可以禁用这种警告.注意取消一个不存在的变量并不会产生错误,即使在指定
set -u
时也是如此。
8.可以使用
unset
命令从 Bash shell 中清除变量。可以使用-v
选项来确保删除变量定义。函数可以使用与变量相同的名字,因此如果希望清除函数定义,就请使用-f
选项。在没有使用-f
或-v
的情况下,如果存在这样一个变量,那么 bash 的 unset 命令就会清除变量定义;否则,如果存在这样一个函数,这个命令就清除函数定义 .
9.在登录 Linux 系统时,您的 id 就有了一个默认 shell,它就是您的登录 shell。如果这个 shell 是 bash,那么它就会在您控制系统之前先执行几个配置脚本。如果存在 /etc/profile 文件,就首先执行这个文件。根据发行版的不同,/etc 中的其他脚本也可能会执行,例如 /etc/bash.bashrc 或 /etc/bashrc。这些脚本运行之后,如果主目录中存在脚本,该脚本也会被执行。Bash 会按照 ~/.bash_profile、~/.bash_login 和 ~/.profile 的顺序来查找文件。最先找到的文件会首先执行。
当您登出系统时,如果主目录中存在 ~/.bash_logout 脚本,bash 就会执行它。
一旦登录进系统并使用 bash,您还可以启动另外一个 shell(称为交互式 shell)来运行命令,例如在后台运行命令。在这种情况中,bash 只会执行 ~/.bashrc 脚本(假设这个脚本存在,如果存在,则是通过使用~/.bash_profile去检查调用的)。通常可以使用如清单所示的命令在 ~/.bash_profile 检查这个脚本,以便可以在登录时或在启动交互式 shell 时执行它。
检查 ~/.bashrc
# include .bashrc if it exists
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
可以使用 --login
选项强制 bash 像登录 shell 一样读取配置文件(通常在除root用户外的其他用户的主目录下,是没有~/.bashrc脚本的,它会使用/etc/bashrc脚本)。如果不希望执行登录 shell 的配置文件,可以指定 --noprofile
选项。类似地,如果希望对某个交互式 shell 不执行 ~/.bashrc 文件,可以使用 --norc
选项来启动 bash。也可以通过指定 --rcfile
选项加上希望使用的文件名来强制 bash 使用 ~/.bashrc 之外的文件。
除了前面介绍的这种在终端中运行 bash 的标准方法之外,bash 也可以通过其他方法加以使用。
除非您引用(source) 脚本在当前 shell 中运行,否则它就会在自己的非交互式 shell 中运行,上面的配置文件都不会被读取。然而,如果设置了 BASH_ENV 变量,那么 bash 就会对这个值进行扩展,并假设它是一个文件名。如果这个文件存在,那么 bash 就会在非交互式 shell 中执行任何脚本或命令之前先执行这个文件。
|
非交互式 shell 也可以使用 --login
选项启动,从而强制配置文件的执行。