Shell Basic

  1. 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 的标准方法之外,bash 也可以通过其他方法加以使用。

除非您引用(source) 脚本在当前 shell 中运行,否则它就会在自己的非交互式 shell 中运行,上面的配置文件都不会被读取。然而,如果设置了 BASH_ENV 变量,那么 bash 就会对这个值进行扩展,并假设它是一个文件名。如果这个文件存在,那么 bash 就会在非交互式 shell 中执行任何脚本或命令之前先执行这个文件。

 使用 BASH_ENV

                    
ian@attic4:~$ cat testenv.sh
#!/bin/bash
echo "Testing the environment"
ian@attic4:~$ cat somescript.sh
#!/bin/bash
echo "Doing nothing"
ian@attic4:~$ export BASH_ENV="~/testenv.sh"
ian@attic4:~$ ./somescript.sh
Testing the environment
Doing nothing

 

非交互式 shell 也可以使用 --login 选项启动,从而强制配置文件的执行。


 


posted @ 2008-08-18 12:50  xiaoyixy  阅读(438)  评论(0编辑  收藏  举报