bash脚本编程之一 变量、变量类型等

shell编程:

编程语言:机器语言、汇编语言、高级语言

高级语言:

                   静态语言:编译型语言

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

                                                                 NULL

                            事先转换成可执行格式

                            eg,C,C++,JAVA,C#

                   动态语言:解释型语言,on the fly

                             通常弱类型语言:变量用时声明,甚至不区分类型(一般默认为字符串)

                              边解释边执行

                              eg,PHP,SHELL,python,perl

面向过程:Shell,C

面向对象:JAVA,Python,perl,C++

变量:内存空间,命名

变量赋值:VAR_NAME=VALUE 将值存储在变量所定义的存储空间中

内存:编址的存储单元

变量类型:用来事先确定数据的存储格式和长度

              字符

              数值:

                     整形

                     浮点型

计算机怎么保证每一个变量都是正确的?

申明一个变量为整形,并且申请一个字节,在里面保存256,最终结果是什么?

溢出:只保留后面00000000,溢出的数据可能会占用其它进程的空间,覆盖其它进程的数据

 

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

通常弱类型语言:变量用时声明,甚至不区分类型(一般默认为字符串)

 

变量赋值:set(set可略) VAR_NAME=VALUE 将值存储在变量所定义的存储空间中

 

bash变量类型:

                      环境变量

                      本地变量(局部变量)

                       位置变量

                       特殊变量

本地变量:在用户现在的shell生命期的脚本中使用

             本地变量:VARNAME=VALUE:作用域为整个bash进程

             局部变量:local VARNAME=VALUE:作用域为当前代码段

 

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

export VARNAME=VALUE

=:VARNAME=VALUE

      export VARNAME

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

              命令行中启动的脚本会继承当前shell环境变量

              系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量

            eg

                 

                  当在命令行中再启动一个shell时,变量仍然在子shell中有效

 

位置变量:以后用到脚本编程的时候再讲

 

特殊变量:保存某些特殊数据

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

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

                  程序执行结果

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

                             0:正确执行

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

输出重定向:/dev/null中

>:覆盖重定向

>>:覆盖追加重定向

2>:错误重定向

2>>:错误追加重定向

&>:正确、错误重定向

/dev/null:软件设备,bit bucket,数据黑洞

 

撤消变量:unset VARNAME

撤消变量值:unset $VARNAME

 

查看当前shell中所有变量

set

查看当前 shell 中的环境变量:

printenv

env

export

 

脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的机制

 

Shebang:!#

#注释行,不执行

Shebang这个符号通常在linux系统的脚本中第一行开头中写到,它指明了执行这个脚本文件的解释程序

1、如果脚本文件中没有#!这一行,那么它执行时会默认用当前Shell去解释这个脚本(即:$SHELL环境变量)

2、 如果#!之后的解释程序是一个可执行文件,那么执行这个脚本时,它就会把文件名及其参数一起作为参数传给那个解释程序去执行。

3、如果#!指定的解释程序没有可执行权限,则会报错“bad interpreter: Permission denied”。如果#!指定的解释程序不是一个可执行文件,那么指定的解释程序会被忽略,转而交给当前的 shell 去执行这个脚本。

4、 如果#!指定的解释程序不存在,那么会报错“bad interpreter: No such file or directory”。注意:#!之后的解释程序,需要写其绝对路径(如:#!/bin/bash),它是不会自动到 $PATH 中寻找解释器的。

5、当然,如果你使用 bash test.sh 这样的命令来执行脚本,那么#!这一行将会被忽略掉,解释器当然是用命令行中显式指定的 bash。

 

bash:

引用变量:${VARNAME} ,{}在大多数时候可以省略

eg遇到会导致变量名混淆的时候,需加{}

此时计算机会认为ANIMALs是变量名,而ANIMALs并没有给其赋值,所以为空

加上{}这个问题就能解决

              

posted @ 2017-08-30 14:44  kgcqw  阅读(193)  评论(0)    收藏  举报