Linux Bash shell
2010-01-20 11:06
246 查看
最简单的命令序列就是由两个命令组成的、用分号 (;) 分隔的序列。所有命令将按顺序执行。Linux 命令通常返回一个零值表示成功,并返回一个非零值表示失败。可以使用 && 和 || 控制操作符来将某些条件处理引入到列表中。如果使用控制操作符 && 来分隔两个命令,那么只有在第一个命令返回 0 表示退出时,才会执行第二个命令。如果使用 || 分隔命令,那么只有在第一个命令返回一个非零的退出代码时,才会执行第二个命令。
您可以使用
[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 环境变量
[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。使用
[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.
您可以使用
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 | 当前的工作目录 |
SHELL | shell 的名称 |
$ | 进程 id(或运行的 bash shell 或其他进程的 PID |
PPID | 启动当前进程的进程的 id(即父进程的 id) |
? | 上一个命令的退出代码 |
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.
相关文章推荐
- Linux下的shell:bash及其特性
- 10个 Linux/Unix下 Bash 和 KSH shell 的作业控制实例
- bash shell (3) linux trap 命令
- linux下shell显示-bash-3.2$ 不显示路径解决方法
- linux 基础学习之三:bash shell初识 下
- Linux中的shell简介bash的基本功能
- Linux bash shell脚本语法入门(转)
- Linux bash shell 逐行读取文件的三种方法
- linux bash shell之declare
- Linux Bash Shell学习笔记
- linux bash shell 子程序、函数的简单声明以及调用
- Linux bash shell 的十个小技巧
- linux超级基础系列——什么是shell? bash和shell有什么关系?(转)
- linux学习篇8--- shell,bash讲解 2 bash的配置文件
- How to: Create Files in Linux from a Bash Shell Prompt
- Linux BASH Shell文件名匹配/输出重定向
- Linux_Bash_Shell快速入门
- linux bash shell之变量替换::=句法、=句法、:-句法、-句法、=?句法、?句法、:+句法、+句法
- linux下shell显示-bash-4.1#的解决方法
- Linux Command Line and....ch4(更多的bash shell)