命令和参数
#!/bin/sh 其中#!用来告诉系统它后面的参数是用来执行该文件的程序,必须放在脚本的首行,不然会在执行脚本的时候报错。
当一个文件开头的两个字符是#!时,内核会扫描其它的部分看是否存在该行的其余部分,看是否存在可用来执行程序的解释器的完整路径。
此外,内核还会扫描是否有一个选项要传递给解释器,可以用which sh 查找该路径;
eg:csh脚本 路径 /usr/ucb/whi
第一行 #!/bin/csh -f ,如果shell的查找路径里面有/usr/ucb,当用户键入whi -q /dev/tty 这条命令时,内核在解释过#!这行后,便会以如下的方式引用csh:
/bin/csh -f /usr/ucb/whi -q /dev/tty
shell的三种命令:内建命令,shell函数,外部命令
* 内建命令:shell本身所执行的命令 eg: cd ls echo 这类的命令
* shell函数:功能健全的一系列代码,可以像命令那样引用
* 外部命令:shell副本所执行的命令
变量
在shell编程中,所有的变量都由字符串组成,并且不需要对变量进行声明,对一个变量赋值:
变量名=值
如果想取出变量的值,需要在变量名前加美元符$,变量名=值,这中间不能有空格
如果变量的值含有空格时,要加上引号,像这样:a="1 2 3"
简单的IO命令及重定向
程序应该有数据来源端 、目的端、报告错误的地方,在shell里面分别对应标准输入,标准输出,错误标准输出。
简单的echo,printf命令 (IO命令)
echo string 用来产生shell脚本的输出
echo 将各个参数打印到标准输出,并以换行符结束,如果不用换行符结束,可用echo -n 或者echo " \c"
printf string 【arguments】 可以按格式输出简单的字符串
第一部分是一个字符串,用来描述输出的排列方式,此字符串包含了按字面显示的字符以及格式声明
格式声明就是表示参数应该按照何种格式进行输出
eg:printf "the first program always prints '%s,%s'!\n" hello world
输出:the first program always prints 'hello world ' 以字符串的格式输出hello world
printf "hello world \n" 注意:printf不会像echo那样,会自动提供一个换行符号
重定向和管道符
改变默认的I/O来源端和目的端,实际上,系统默认的标准输入(键盘),标准输出(终端)
* < 改变标准输入 > 改变标准输出
eg:program < file1 program> file2
* >>追加 如果目的文件不存在,>>会重新新建一个,存在的话,会添加信息到原文件结尾处。
* | 管道符
eg: p1 | p2 p1的标准输出是p2的标准输入