shell简单命令

来源:互联网 发布:网络剧受众分析论文 编辑:程序博客网 时间:2024/06/15 07:00

现在请继续在 linux 字符界面下输入 man bash,调出 bash 的帮助页面,然后找到 shell语法”那一部分,我们就是以这里的描述作为实现的依据。

 bash帮助的“shell 语法”一节,是这样来定义shell 语法的:

 简单命令

简单命令是(可选的)一系列变量赋值紧接着是空白字符分隔的词和重定向符号最后以一个控制操作符结束第一个词指明了要执行的命令它被作为第 0 个参数其余词被作为这个命令的参数.

       这个定义可以这样来理解:

1  可以有变量赋值,例如

a=10 b=20 exporta b

2  “词”是以空白字符分隔开的,空白字符包括制表符(tab)和空格,例如:

ls /tmp

就是两个词,一个 ls,一个 /tmp

3、可以出现重定向符号,重定向符号是“>”和“<”,例如:

echo “hello world”> /tmp/log

4  简单命令结束于控制操作符,控制操作符包括:

||  &   &&     ;   ;;  ( )   |  <newline>

例如,用户输入:

ls /tmp

用户最后敲的回车键就是控制操作符 newline,表示要结束这个简单命令。

如果用户输入:

echo“100” ; echo “200”

那么这是两个简单命令,第一个结束于“;”,第二个结束于newline

5  简单命令的第一个词是要执行的命令,其余的词都是这个命令的参数,例如:

echo “hello world” echo

第一个echo 是命令,第二个词“hello world”是参数1,第三个词 echo 是参数2,而不再作为一个命令了。

简单命令是 shell 语法中最小的命令,通过简单命令的组合,又可以得到管道命令和列表命令。

l         管道(命令)

管道是一个或多个简单命令的序列,两个简单命令之间通过管道符号(“|”)来分隔

例如

echo “hello world” | wc–l

就是一个管道,它由两个简单命令组成,两个简单命令之间用管道符号分隔开。

我们可以看到,管道符号“|”也是属于上面提到的控制操作符。

根据这个定义,一个简单命令也同时是一个管道。

管道的作用是把它前面的那个简单命令的输出作为后面那个简单命令的输入,就上面这个例子来说:

echo “helloworld” 本来是要在标准输出(屏幕)上打印 “helloworld” 的,但是管道现在不让结果输出到屏幕上,而是“流”到 wc–l 这个简单命令,wc –l 就把“流”过来的数据作为它的标准输入进行计算,从而统计出结果是 1 行。

关于管道更详细的内容,我们在后面具体实现管道的时候再说明。

l         列表(命令):

列表是一个或多个管道组成的序列,两个管道之间用操作符 ;, &,&&,  || 分隔。我们看到,这几个操作符都属于控制操作符。

例如

echo “hello world”| wc –l ; echo “nice to meet you”

就是一个列表,它由两个管道组成,管道之间用分号(;)隔开

分号这种控制操作符仅仅表示一种执行上的先后顺序。

l         复合命令

       这个定义比较复杂,实现起来也有相当难度,在咱们这个示例程序中,就不实现了。

以上是 shell 语法规范的定义,我们的 shell 程序就是要以此规范为依据,实现对简单命令、管道和列表的解释。对于列表中的控制操作符,我们只支持分号(;),其它的留给读者自己来实现。

原创粉丝点击