第四讲 shell程序设计与用户管理
4.1 shell
shell 是 一 种 命 令 行 解 释 程 序
( Command-Language Interpreter),负责用户和操作系统的沟通 。
在终端方式的 shell 提示窗口如图 4.1所示 。
图 4.1 shell提示窗口
4.2 Shell程序设计
Shell是 Linux系统中的一个重要的层次,它是用户与系统交互作用的界面。
Shell除了作为命令解释程序以外,
还是一种高级程序设计语言。利用 Shell
程序设计语言可以编写出功能很强、但代码简单的程序。
– 4.2.1 Shell概述
1,Shell的特点和主要版本
在 Linux系统中通常提供多种不同的
Shell,常用的有 Bourne shell( 简称 sh),
C-shell( 简称 csh),Korn shell( 简称 ksh)
和 Bourne Again shell( 简称 bash) 。 bash
是 Linux中一个默认的 shell,本节主要介绍 bash。
2,Shell程序示例
Shell程序也可存放在文件上,下面是两个 shell程序示例 。
【 例 4.1】 由 3条简单命令组成的 shell程序 ( 文件名为 ex1) 。
date
pwd
cd,.
【 例 4.2】 带有控制结构的 shell程序 ( 文件名为 ex2) 。
#If no arguments,then listing the current
directory.
#Otherwise,listing each subdirectory.
If test $# =0
then ls
else
for i
do
ls –l $ i | grep ‘^d ‘
done
fi
3,Shell过程的建立和执行
称作 Shell文件或者 Shell脚本( Shell script)。
建立 Shell过程的步骤同建立普通文本文件相同,利用编辑器(如 vi或 gedit)进行程序录入和编辑加工。
执行 Shell过程的方式主要有以下 3种 。
–( 1) 输入定向到 Shell过程
–( 2) 以过程名作为参数
–( 3) 将 Shell过程改为可执行文件
– 4.2.2 Shell变量
Shell有两种变量:环境变量和临时变量 。 环境变量是永久性变量,其值不会随 Shell过程执行结束而消失 。 而临时变量是在 Shell程序内部定义的,其使用范围仅限于定义它的程序,出了本程序就不能再用它;而且当程序执行完毕,它的值也就不存在了 。
在 Shell过程中临时变量又分为两类:用户定义的变量和位置参数 。
1,用户定义的变量
定义变量并赋值的一般形式是
变量名=字符串
例如,myfile=/home/lcd/ff/m1.c。
【 例 4.3】 用 echo命令显示变量值 。
$dir=/home/lcd/ff
$echo $ dir
/home/lcd/ff
$echo dir
dir
$
2,输入/输出命令
–( 1) read命令
可以利用 read命令由标准输入读取数据,然后赋给指定的变量 。 其一般格式是
read 变量 1[变量 2… ]
–( 2) echo命令
在前面例子中已使用过 echo命令,它将其后的参数在标准输出上输出。各参数间以空格隔开,以换行符终止。
– 4.2.3 Shell中的特殊字符
Shell中除使用普通字符外,还使用了一些特殊字符,它们有特定的含义,在使用时应注意它们表示的意义和作用范围 。
1,通配符
通配符用于模式匹配,如文件名匹配、路径名搜索、字符串查找等。
2,引号
在 Shell中引号分为 3种:单引号,双引号和倒引号 。
–( 1) 双引号
由双引号括起来的字符,除 $,倒引号和反斜线 ( \) 仍保留其特殊功能外,其余字符通常作为普通字符对待 。
–( 2) 单引号
由单引号括起来的字符都作为普通字符出现。
–( 3) 倒引号
倒引号括起来的字符串被 Shell解释为命令行。
3,输入输出重定向符
执行一个 Shell命令时通常会自动打开 3个标准文件,这就是:标准输入文件 ( stdin),通常对应终端的键盘;标准输出文件 ( stdout) 和标准出错输出文件 ( stderr),这两个文件都对应终端的屏幕 。
在 Shell中,这 3个文件都可以通过重新定向符进行重新定向 。
–( 1) 输入重定向符
输入重定向符,<”的作用是把命令(或可执行程序)的标准输入重新定向到指定文件。
–( 2) 输出重定向符
输出重定向符,>”的作用是把命令 ( 或可执行程序 ) 的标准输出重定向到指定文件 。 这样,该命令的输出就不在屏幕上显示,而是写入指定文件中 。 例如,
$who > abc
命令 who的输出重新定向到 abc文件中,在屏幕上看不到执行 who的结果。
4,注释,管道线和后台命令
–( 1) 注释
如前所述,Shell程序中以 #开头的正文行表示注释 。
–( 2) 管道线
在 Linux系统中管道线是由竖杠 ( |) 隔开的若干个命令组成的序列,例如,
ls –l $HOME | wc?l
在管道线中,每个命令运行时都有一个独立的进程 。 前一个命令的输出正是下一个命令的输入 。 而管道线中有一类命令也称作,过滤器,,
过滤器首先读取输入,然后将输入以某种简单方式进行变换 ( 相当于过滤 ),再将处理结果输出,例如 grep,tail,sort和 wc等命令就称为过滤器 。
一个管道线中可以包括多条命令,例如,
ls | grep m?.c | wc –l
打印出当前目录文件名是以 m打头,后随一个字符的所有 C文件的数目 。
( 3) 后台命令
通常,在主提示符之后输入的命令都立即得到执行 。 在执行过程中,用户和系统可以发生交互作用 —用户输入数据,系统进行处理,
并输出运行结果 。 这种工作方式就是前台方式 。
但是有些程序的运行要花费较长时间,如调用 C编译对 C程序进行编译 。 如果想在编译的同时做别的事情,那么就输入命令
$cc m1.c&
即在一条命令的最后输入,&”符号,Shell
就在后台启动该程序,并且马上显示主提示符,
提醒输入新的命令 。