入门

脚本语言和编译型语言的差异

许多中性、大型的程序都是用编译语言书写的,这类的语言可以从源代码转换成目标代码,便能直接通过计算机执行;
编译语言的好处是高效,缺点是:多半运作于底层,所处理的字节、整数、浮点数或是其他机器层级的对象;
脚本语言通常是解释型的,这类程序的执行是由解释器读入程序代码,并将其转换成内部的形式;

SHELL的特点

1、简单性;
2、可移植性;
3、开发容易

一个简单的脚本

查看系统上面有多少人登录: who 命苦可以查询
在这里插入图片描述
计算用户个数: who | wc -l
| 管道符可以在两程序之间建立通道,who 的输出,成了wc 的输入,wc 所列出的结果就是已经登录用户的个数 ;
下一步是将管道符转换成一个独特的命令,方法是把这条命令输入一个一般的文件中,然后使用 chmod 赋权执行,如下 :
cat > nusers who| wc -l
^D
chmod +x nusers
./nusers

位于第一行的#!

告知UNIX内核应该是以那个shell来执行所指定的shell脚本
当一个文件中开头的两个字符是#!时,内核或烧苗改行的其余的部分,看是否存在可以用来执行程序的解释器的完整的路径

注意:

1、当今的系统,对#!这一行的长度限制从63 到1024 个字符都有,请尽量不要超过64 个字符
2、在某些系统上,命令行不符包含了名录库的完整的路径命令,不过有些系统却不是这样,命令刚的不符会原封不动的传给程序,因此,脚本的移植性取决于是否与完整的路径名称
3、别再选项之后方知任何空杯的部分,因为空白也会跟着选项一起传递给被引用的程序
4、你需要知道解释器的完成路径名称,这个可以用来规避可移植性问题,应为不同的厂商可能将同样的东西放在不同的地方
5、一些比较旧的系统上面,内核不具备解释#!的能力,有些shell会自行的处理,这些shell对于#! 与紧随其后的解释器名称职期间是否可以有空白,可能会有不同的解释;
在这里插入图片描述
POSIX标准对于#! 的行为模式保留未定义(unspcified)
状态,此状态是“只要一直保持POSIX兼容性,这是一个扩展功能”的标准的说法;

shell的基本元素

shell 命令和参数

shell 最基本的工作就是执行命令
如果你使用的是 & 符号而不是 分好,则shell将在后台执行其前面的命令,这以为这shell 不用等到该命令完成,就可以继续执行下一个命令

shell识别三中基本命令:内建命令、shell函数以及外部命令 :

1、内建命令是由Shell奔上所执行的命令 ,有些命令是用于其必要性才内建的;另一种的内建命令的存在是为了效率,还有I/O命令
2、Shell函数是功能健全的一系列程序代码,是以shell语言写成的,他们可以像命令那样引用
3、外部命令是由shell的副本所执行的命令,基本的过程如下:
a、建立一个新的进程。此进程即为一个shell的副本
b、在习惯的进程中在PATH变量内所列出的目录中,虚招特定的命令
c、在新的进程中,以所找到的新程序所取代执行中的Shell程序并执行
d、程序完成之后,最初的Shell会接着从终端读取的下一条命令,或执行脚本里面下一条命令

Shell 变量

shell 变量名称的开头是一个字母或者下划线符号,后面可以接任意长度的字母、数字或者下划线符号,变量名称的字符长度并无限制
变量赋值的方式是 :先写变量名称,紧接着=字符,最后是新值,中间完全没有任何的空格,当你想取出shell 变量的值时,需于变量名称前面减伤$字符,当赋予的值内涵空格是,请加上引号

简单的echo输出

ECho的任几时产生输出,可以用来提示用户,或者是用来成圣数据进一步的处理,原始的echo命令只会将参数打印到标准的输出,参数之前会以一个空格隔开,并以换行符(newline)结尾;
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

华丽的printf输出

printf 命令的完整语法分为两个部分:
printf format -string [arguments …]
第一部分是一个字符创,用来描述输出的排列方式,最好为此字符串加上引号。
第二部分是与格式声明的相对用的参数列表(argument list ),声明的部分可以分为两个部分: 百分号符号(%)和指示符(specifier)。最常用的格式指示符(format specifier) 有两个,%s 用于字符串,%的 用于十进制整数 。

基本的I/O重定向

校准的输出/输出可能是软件设置原则中最重要的概念,这个概念是:程序应该有数据的来源端、数据的目的端以及报告问题的地方,其分贝被称为标准的输入、标准输出和标准错误输出。

重定向与管道

以< 改变标准输入
以>改变标准输出
以>> 附件到文件
以 | 建立管道
在这里插入图片描述

特殊文件 :/dev/null 与 /dev/tty

基本命令查找

配置文件 .profile

访问shell 脚本的参数

位置参数:shell脚本中的命令行参数

简单的执行跟踪

一个加号后面跟着一个空格

国际化和本地化

国际化:i18n 本地化: l10n