您的位置:首页 > 运维架构 > Shell

Linux Bash shell

2010-01-20 11:06 246 查看
最简单的命令序列就是由两个命令组成的、用分号 (;) 分隔的序列。所有命令将按顺序执行。Linux 命令通常返回一个零值表示成功,并返回一个非零值表示失败。可以使用 && 和 || 控制操作符来将某些条件处理引入到列表中。如果使用控制操作符 && 来分隔两个命令,那么只有在第一个命令返回 0 表示退出时,才会执行第二个命令。如果使用 || 分隔命令,那么只有在第一个命令返回一个非零的退出代码时,才会执行第二个命令。
您可以使用
exit
命令终止一个 shell。或者可以提供一个 exit 代码作为参数。如果您使用圆括号括起命令或命令列表,那么命令或序列将在一个 sub shell 中执行,因此 exit 命令将退出 sub shell,而不是退出您所在的 shell。

[ian@echidna ~]$ (echo In subshell; exit 0) && echo OK || echo Bad exit
In subshell
OK
[ian@echidna ~]$ (echo In subshell; exit 4) && echo OK || echo Bad exit
In subshell
Bad exit

当您在 bash shell 中运行时,有许多东西构成了您的环境,比如提示表单、主目录、工作目录、shell 名称、打开的文件、定义的函数,等等。您的环境包括许多由 bash 或您设置的变量。bash shell 还允许您拥有 shell 变量,可以将其导出 到您的环境,以供运行在 shell 中的其他进程或衍生自当前 shell 的其他 shell 使用。
环境变量和 shell 变量都具有一个名称。可以通过在名称前面加一个 “$” 前缀来引用变量的值。
一些常见 bash 环境变量

名称作用
USER已登录用户的名称
UID用数字表示的已登录用户的用户 id
HOME用户的主目录
PWD当前的工作目录
SHELLshell 的名称
$进程 id(或运行的 bash shell 或其他进程的 PID
PPID启动当前进程的进程的 id(即父进程的 id)
?上一个命令的退出代码
[ian@echidna ~]$ echo $USER $UID
ian 500
[ian@echidna ~]$ echo $SHELL $HOME $PWD
/bin/bash /home/ian /home/ian
[ian@echidna ~]$ (exit 0);echo $?;(exit 4);echo $?
0
4
[ian@echidna ~]$ echo $$ $PPID
2559 2558
shell 将扩展使用双引号 ($quot;) 括起的 shell 变量,而在使用单引号 (') 时不会扩展。在前面的示例中,我们在 shell 中启动了另一个 shell 并且获得一个新的进程 id。使用
-c
选项,您可以将一个命令传递给另一个 shell,后者将执行命令并返回。如果传递一个使用引号括起的字符串作为命令,那么外部 shell 将去掉引号并传递字符串。如果使用的是双引号,那么将在传递字符串之前执行变量扩展,因此产生的结果可能与您期望的不同。shell 和命令将在另一个进程中运行,因此将使用另一个 PID。清单 9 解释了这些概念。顶级 bash shell 的 PID 被突出显示。

[ian@echidna ~]$ echo "$SHELL" '$SHELL' "$$" '$$'
/bin/bash $SHELL 2559 $$
[ian@echidna ~]$ bash -c "echo Expand in parent $$ $PPID"
Expand in parent 2559 2558
[ian@echidna ~]$ bash -c 'echo Expand in child $$ $PPID'
Expand in child 2845 2559
解释:第一条命令中双引号括起来的部分直接被扩展,单引号括起来的部分作为字符串被传递。
第二条命令中由于$后的内容都是被双引号括起来的,所以直接在当前BASH中先被扩展,$$被扩展为当前BASH的PID 2559,$PPID被扩展为当前BASH的父BASH的PID 2558,然后2559和2558被作为字符串跟在前面的字符串之后被传递到当前BASH调用的子BASH中。
第三条命令由于是用单引号括起来的,所以整个单引号内的内容被作为字符串传递到子BASH中,然后在子BASH中被扩展,所以$$被扩展为子BASH的PID2845,$PPID被扩展为其父BASH的PID2559.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: