UNIXShell使用指南:从引用到核心内置命令
立即解锁
发布时间: 2025-08-22 01:11:54 阅读量: 2 订阅数: 10 


UNIX编程与系统管理实战指南
### UNIX Shell使用指南:从引用到核心内置命令
#### 1. 引用机制
在UNIX Shell中,有时我们需要抑制通配符替换、变量替换或命令替换机制,这时就可以使用Shell的引用系统。具体规则如下:
- 单引号('):抑制通配符替换、变量替换和命令替换。
- 双引号("):仅抑制通配符替换。
- 当引号嵌套时,只有外层引号起作用。
以下是示例代码,展示了两种引号的区别:
```bash
$ echo 3 * 4 = 12
...remember, * is a wildcard.
3 a.c b.c c.c 4 = 12
$ echo "3 * 4 = 12"
...double quotes inhibit wildcards.
3 * 4 = 12
$ echo '3 * 4 = 12'
...single quotes inhibit wildcards.
3 * 4 = 12
$ name=Graham
$ echo 'my name is $name - date is `date`'
my name is $name and the date is `date`
$ echo "my name is $name - date is `date`"
my name is Graham - date is Mon Feb 2 23:14:56 CST 1998
```
此外,还有一些特殊的内置Shell变量,如下表所示:
| 名称 | 含义 |
| ---- | ---- |
| $$ | Shell的进程ID |
| $0 | 脚本名称(如果适用) |
| $1..$9 | $n 指第n个命令行参数(如果适用) |
| $* | 所有命令行参数的列表 |
#### 2. Here文档
Here文档是一种特殊的语法,用于将多行文本作为命令的标准输入。当Shell遇到 `command << word` 形式的序列时,它会将标准输入复制到以 `word` 开头的行(不包括该行),并将其放入Shell缓冲区,然后执行 `command`,使用缓冲区的内容作为标准输入。
以下是一个Here文档的示例:
```bash
$ cat here.sh
...look at an example of a "here" doc.
mail $1 << ENDOFTEXT
Dear $1,
Please see me regarding some exciting news!
- $USER
ENDOFTEXT
echo mail sent to $1
$ here.sh glass
...send mail to myself using the script.
mail sent to glass
$ mail
...look at my mail.
Mail version SMI 4.0 Sat Oct 13 20:32:29 PDT 1990 Type ? for help.
>N 1 [email protected] Mon Feb 2 13:34 12/384
& 1
...read message #1.
From: Graham Glass <[email protected]>
To: [email protected]
Dear glass,
Please see me regarding some exciting news!
- glass
& q
...quit out of mail.
```
#### 3. 作业控制
UNIX的多任务处理功能非常方便,为了管理当前进程,我们可以使用以下工具和命令:
- `ps`:生成进程列表及其属性,包括名称、进程ID、控制终端和所有者。
- `kill`:根据进程ID终止进程。
- `wait`:让Shell等待子进程终止。
##### 3.1 进程状态:ps
`ps` 工具可以监控进程状态。以下是一个示例,使用 `sleep` 工具延迟 `echo` 语句,并将命令放在后台执行,然后使用 `ps` 查看相关进程:
```bash
$ (sleep 10; echo done) &
...delayed echo in background.
27387
...the process ID number.
$ ps
...obtain a process status list.
PID TTY TIME CMD
27355 pts/3 0:00 -sh
...the login shell.
27387 pts/3 0:00 -sh
...the subshell.
27388 pts/3 0:00 sleep 10
...the sleep.
27389 pts/3 0:00 ps
...the ps command itself!
$ done
...the output from the background process.
```
`ps` 命令还有一些常用选项:
- `-e`:显示所有正在运行的进程。
- `-f`:生成完整的列表。
- `-l`:生成详细的列表。
`ps` 输出的常见列含义如下表所示:
| 列名 | 含义 |
| ---- | ---- |
| S | 进程状态 |
| UID | 进程的有效用户ID |
| PID | 进程ID |
| PPID | 父进程ID |
| C | 进程在最后一分钟使用的CPU时间百分比 |
| PRI | 进程的优先级 |
| SZ | 进程数据和堆栈的大小(以千字节为单位) |
| STIME | 进程创建时间,如果是今天之前创建的则显示日期 |
| TTY | 控制终端 |
| TIME | 到目前为止使用的CPU时间(MM:SS) |
| CMD | 命令名称 |
进程状态代码如下表所示:
| 字母 | 含义 |
| ---- | ---- |
| O | 在处理器上运行 |
| R | 可运行 |
| S | 睡眠 |
| T | 暂停 |
| Z | 僵尸进程 |
如果想跟踪系统中其他用户的进程,可以使用 `ps -ef` 命令:
```bash
$ ps -ef
...list all user's processes.
UID PID PPID C STIME TTY TIME CMD
root 0
```
0
0
复制全文
相关推荐










