[align=center]《我的shell笔记之初窥门径》[/align]
很高兴回来,这几天由于事情很多所以学习shell的进度有些慢,看到之前的几篇帖子大家还是很喜欢的,感觉很欣慰。其实我并不是高手,只是希望将自己学习和心得体会与大家分享。有朋友说帖子内容较少不够看,对此表示歉意。因为每天时间真的不是很多。好了,闲言少叙回到shell编程上来。
今天我们来共同学习一下shell的基本元素。
(1)命令与参数
相信大家对命令和参数都不是很陌生,其实shell最基本的工作就是执行命令。每键入一道命令,shell就会执行。
命令格式: 命令名称 选项(option) 参数(argument)
我们着重说说选项,选项的开头是一个破折号(或减号),后面接一个字母。选项是可有可无的,有的需要加参数,不需要参数的选项可以合并。长选项的开头是一个或两个破折号,这个根据程序而定。
最后要说的是分号“;”可以用来分隔多同一行里多条命令。shell会依次执行这些命令。如果你使用的事&符号而不是分号,则shell将在后台执行其前面的命令,这意味着shell不等到该命令完成,就可以继续执行下一个命令。
shell识别三种基本命令:内建命令、shell函数、以及外部命令:
(1)内建命令就由shell本身所执行的命令。
(2)shell函数是功能健全的一系列代码,以shell语言写成,它们可以像命令那样引用。
(3)外部命令就是由shell的副本(新的进程)所执行的命令,基本过程如下:
一、建立一个新的进程,此进程即为shell的一个副本。
二、在新进程里,在PATH变量内列出的目录中寻找特定的命令。
三、在新进程里,以所找到的新程序取代执行中的shell程序并执行。
四、程序完成后,最初的shell会接着从终端读取下一条命令,或执行脚本里的下一条命令。
(2)变量(3)
说到变量,对于学过C语言的或者是接触过编程的人类来说再熟悉不过了。
所谓变量就是为某信息片段所起的名字,所有程序语言都会有变量,shell也是如此。每个变量都有一个值,是由你分配给变量的内容或信息。变量值通常是空值,即null。shell变量名的开头是一个字母或下划线符号,后面可以接任意长度的字母、数字或下划线符号。变量名的字符长度是无限制的。shell变量可用来保存字符串值,同样被保存的字符数也没有限制。
(3)简单的echo输出
语法: echo [string???????]
用途:产生shell脚本的输出。
主要选项:无
行为模式:echo将各个参数打印到标准输出,参数之间以一个空格分开,并以换行符号结束。
当然还会有一些转义字符的存在,例如\b表示退格之类的,恕不赘述。
(4)printf输出
printf命令模仿C程序库里的printf()库程序。它几乎复制了该函数所有功能。当然,它在shell层级上的版本上,会有些差异。
printf与echo最大的不同在于:前者不像后者那样会自动提供一个换行符号。你必须显示地将换行符号指定成\n。
printf 命令的完整语法分为两部分:
printf format-string [arguments??????]
第一部分是一个字符串,用来描述输出的排列方式,最好为此字符串加上引号。
第二部分是与格式声明对应的参数列表,例如一系列字符串或变量值。
例如 :pirntf "The first program always hello world\n"
(5)基本I/O重定向
一、重定向与管道
以<改变标准输入
program > file 可将program的标准输入修改为file:
tr -d 'r' < dos-file.txt ???
以>改变标准输出
program > file 可将program的标准输出修改为file:
tr -d 'r' < dos-file.txt >UNIX-file.txt
>重定向符在目的文件不存在时,会新建一个。然而如果目的文件存在,它就会被覆盖掉;原本的数据就会丢失。
为了防止这种情况可以使用>>符
以>>附加到文件
program>>file可将program的标准输出附加到file的结尾处。
以 | 建立管道
program1 | program2可将program1的标准输出修改为program2的标准输入。
管道可以把两个以上的执行中的程序衔接在一起。这么做的好处是使得执行速度比使用临时文件的程序快上十倍。
二、特殊文件: /dev/null与/dev/tty
UNIX系统提供了两个对shell编程特别有用的特殊文件。
有兴趣的朋友可以自己看看,这里我就不多说了。
今天真的很累了,先写到这里吧。下次再见。
未完待续??????