shell 脚本编程

编译器、解释器

编程语言分为:机器语言(010101 代码)、汇编语言、高级语言(比较接近于人类的思考方 式,也接近于机器的运行特性,需要编译器或者解释器转换成机器语言) 

高级语言基本可以分为两类:

静态语言:编译型语言,一般都是强类型的语言

                  需要实现编译,实现转换成可执行格式

                  属于静态语言的:C,C++,Java,C#等

动态语言:解释型语言,一般都是弱类型的语言

                 边解释边执行(如:解释器解释一条语句执行一条语句)

                 如:ASP,PHP,shell,python,perl等等

shell为解释型语言,也就是说运行bash的脚本时,系统中要有bash的解释器,解释器本身通常都是由静态语言开发的。

面向过程:着眼点在问题解决过程的本身动作,shell脚本,C语言都是面向过程的

面向对象:将问题抽象为一个对象,Java,python为纯面向对象的

要想理解编程,就必须得理解变量,变量就是内存空间

变量:指向一段内存空间,对内存空间得一个命名

内存为编址得存储单元,都有唯一得地址指向某个存储单元

如存储一个字符串的“10”和一个整数“10”的区别:

字符串“10”:需要 16bit 存储空间 整数 10:需要 8bit (8 位二进制保存的范围 0-255 ,2^8)

所以变量需要有类型:

变量类型:实现确定数据的存储格式和存储长度,如字符,整数。。。。。。

字符:

数值:

        整型

        浮点型

        Bool 型:真、假 

脚本语言,有解释器得语言,变量都是弱类型得,都有解释器提供保护机制,来规范变量类型。

运算除了算术运算,还有逻辑运算:

逻辑运算:与,或,非,异或

异或:两个操作数相同为假,否则为真

Shell:弱类型编程语言

强类型语言:变量在使用前,必须事先声明,甚至还需要初始化

弱类型语言:变量用时声明,就是拿来直接使用即可,不区分类型 
 
变量赋值:VAR_NAME=VALUE 

对于bash shell变量类型:

环境变量:作用域为当前shell进程及其子进程(子shell)

       定义环境变量:export  VARNAME=VALUE(也称为导出一个变量)

环境变量例子:

此时,如果重新登陆一个shell,则读取不到,因为重新登陆shell与当前shell已经没有任何联系了。

 脚本在执行时会启动一个子shell进程:

         命令行启动得脚本会继承当前得shell环境:

         系统自动执行得脚本(非命令行启动),需要定义需要得各环境变量:(如:crontab中的脚本经常出现某种问题)

 本地变量:声明本地变量 VARNAME=VALUE,作用范围为整个脚本

 局部变量:针对函数而言,声明局部变量:local   VARNAME=VALUE,作用范围为当前的代码段

 

位置变量:$1,$2,......用来引用脚本的参数的

特殊变量:bash内置的,用来保存某些特殊数据的变量

                  $?:上一个命令执行状态返回值

                   程序执行,可能有两类返回值:

                           程序执行结果 

                            程序状态返回代码(0-255)

                             0:正确执行

                             1-255: 错误执行,1,2,127 为系统预留 

                           

                           

引用变量:${VARNAME},{}可以省略,在父shell声明的变量不能被子shell使用

必须得使用{}的情况:

有时候在命令输入执行后,程序执行结果不需要,只要状态返回码,这时需要将程序执行结果重定向

输出重定向:

>:覆盖重定向

>>:追加重定向

2>:错误重定向 2

>>:错误之家重定向

&>:同时重定向

一个经常用到的重定向特殊位置:/dev/null

撤销变量:

    定义变量的时候使用set,一般情况下都省略了。Unset撤销变量

    unset  VARNAME 

    注:变量名不加$,export 的时候变量名也不加$

    

查看当前 shell 中的变量:包括环境变量和本地变量

查看当前 shell 的环境变量:

Printenv

Env

Export

变量的追加:

为 PATH 环境变量补上一个新的执行路径:

对于shell来讲,所有的变量默认都是字符串,所以默认情况下是不能做算术运算的

脚本:通常情况下为命令的堆砌,按照实际需要结合命令流程控制机制实现源程序

(file 查看是否为可执行程序,ELF为linux内核可以直接运行的程序)

Shebang:制定程序的模数

练习: 1、添加 5 个用户,user1,user2...user5 2、每个用户的密码同用户名,而且要求,添加密码完成后不显示命令执行的结果信息 3、每个用户添加完成后都要显示”用户 xxx 已经成功添加“;若用户此前已经存在则也要提 示出来,并且不执行添加动作
 
练习:写一个脚本,完成以下任务: 1、使用一个变量保存一个用户名 2、删除此变量中的用户且一并删除其家目录 3、显示”用户删除完成“类的提示信息
 
从根本上讲,上边的两个联系不能称为脚本,只是命令的简单堆砌

条件判断:

Bash 如何实现条件判断:

条件测试类型:

      整数测试:2是否等于3

      字符串测试:变量中的字符串是否为“abcd”

      文件测试:文件是否存在

条件测试的表达式,常用的三种

      [expression]

      [[expression]](两个中括号是bash的关键字)

      test   expression

整数比较:

-eq:测试两个整数是否相等:$A -eq $B

-

-ne:测试两个整数是否不相等;$A -ne $B,不相等为真,相等为假

-gt:测试一个数是否大于另外一个数;$A  -gt $B

-lt:测试一个数是否小于另一个数

le:小于或者等于

Bash shell 中命令的逻辑关系:

逻辑与:&& 第一个条件为假时,第二个条件不会再判断,最终结果已经确定。若第一个条件为真,则第二个条件必须再判断,最后才会确定最终的判断。

逻辑或:||   如果第一个条件为假,那么就执行第二个条件的命令

变量名:

  1.只能包含字母,数字和下划线,并且不能数字开头

  2.不应该跟系统中已有的环境变量重名

  3.最好做到见名义

 

           

猜你喜欢

转载自blog.csdn.net/y805805/article/details/83473018