进入流程控制我们首先要弄清楚的就是一些词汇的概念包括“条件”的概念,在此,我们不得不面对一些小学时候背字典没有背到的词汇:
(别怪我下面不说人话,这些词汇很重要)
command:
command的实质是program或script,由于它们(或它们的链接)被放入了$PATH所指定的路径(用whereis查一下就看到了)中,因而可以通过直接输入它们的名字来执行。
condition:
condition既可以是expression也可以是command。使用expression作为condition的格式就像C那样,比如“if (aa>bb)”在shell中写作“if [ $aa > $bb ]”(要注意的是,shell对格式的要求是很严格的,一个空格也不能少);使用command作为condition时,condition判断的是command的返回,若成功,condition为ture,若失败,condition为false。
使用pression作为condition的时候,pression语句一定要用中括号括起来,如果是command,就不需要了。
command:
没错,你没看错,我也没打错,还是command,但这一个command你要知道它是一个动词——我的意思是,如果你把command作为condition,它不仅会被用来判断返回值,还有——它会被执行,用好这一点,对于表层的代码优化很重要。
(读者:那底层呢?)
(Zarok:去问Linus先生吧,我可不知道)
对于它们的关系,我们可以用一个N字形的图直观的表示出来:
condition command
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
pression command
command既可以是pression也可以是command,如果是command,它同时会被执行
(这个书上可没有~)
list:
在shell编程中,list并不单纯地指一个列表(像/etc/fstab那样),很多时候,从我们的目的方向而言,它是一个值的列表,比如:
#!/bin/bash
{
while read aa bb
do
echo $aa $bb
done } < $1
注:这个语法属于“命令块”了,在语法上,shell会把大括号中的指令们当作一个指令——就好像“指令 < 文件”一样。
这里的$1就相当于一个list,变量(们)(请原谅我用“们”,因为我用“变量s”你们看不懂它是复数形式)会从list中一遍又一遍的取值,在for结构中的list就是这个:
for var in list
do
operation
done
不同之处在于for一次只能为一个变量赋值,read aa bb 可以为多个变量赋值。
当然,只要是名词就可以作为list,比如$(ls /)这种结构就可以,它也是一个值的列表。
阅读(766) | 评论(0) | 转发(0) |