shell编程:

编译器,解释器

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


静态语言:编译型语言

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

    关键字:

    事先转换成可执行格式

    C、C++、JAVA、C#


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

弱类型:边解释边执行,变量用时声明,甚至不区分类型:

PHPshellpythonperl


面向过程:  shellC

面向对象:JAVApythonperlC++


变量:

变量:内存空间的命名

内存:编址的存储单元

进程:一个程序运行会产生相关进程。


计算机数据的基本存储单位。 8bit()=1Byte(字节) 1024Byte(字节)=1KB 1024KB=1MB 1024MB=1GB 1024GB=1TB

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

一个字符占一个字节,一个汉字占两个字节



  字符:

  数值:

     整型

     浮点型:11.23/1.123*10^1/0.1123*10^2   

     2015/10/1064bit

     99999  24bit

 10(字符)2个字符  16bit

 10 (数值) 1010  4位  8bit  (一个字节8位)



整型,8bit256

0-255, 溢出

 

布尔型:真假型

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

1:真

0:假

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


变量赋值:VAR_NAME=VALUE


bash变量类型:

环境变量

本地变量(局部变量)

位置变量

特殊变量


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

         export VARNAME=VALUE 

         VARNAME=VALUE

         export VARNAME

        “导出


本地变量:整个bash进程都可以使用

         set  VARNAME=VALUE  


局部变量:作用域为当前代码段

         local VARNAME=VALUE  


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

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

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


bash进程中定义变量

bash脚本编程之一  变量及变量类型_bash

引用变量:${VARNAMW},有时候括号可省略。

 bash脚本编程之一  变量及变量类型_变量_02


“”弱引用,变量可做替换的

‘’强引用,变量不可做替换的

   bash脚本编程之一  变量及变量类型_bash_03


位置变量:

  $1$2.....

 

特殊变量:

$? :上一个命令的执行状态返回值(正确或错误);


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

程序执行结果

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

    0  :正确执行

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

bash脚本编程之一  变量及变量类型_脚本_04


判断一个用户是否存在:

bash脚本编程之一  变量及变量类型_bash_05


输出重定向:

 >

 >>

2>

2>>

&>

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

bash脚本编程之一  变量及变量类型_脚本_06


查看当前shell中的变量:set

查看当前shell中的环境变量:printenv、env、export 


变量中追加变量(给字符串变量赋值)

bash脚本编程之一  变量及变量类型_变量_07


bash脚本编程之一  变量及变量类型_脚本_08


bash脚本编程之一  变量及变量类型_bash_09


变量默认是字符型,不能做算术运算的

bash脚本编程之一  变量及变量类型_bash_10


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

Linux内核只能识别ELF(可执行可链接)格式

bash脚本编程之一  变量及变量类型_脚本_11


bash脚本编程之一  变量及变量类型_脚本_12

Linux内核是不能识别ASCII格式的,发现这不是可执行文件的时候得告诉内核这是一个脚本,让内核启动一个脚本解释器来执行它。

 

每个脚本开头行都有一个魔数(shebang):

#/bin/bash   (#!开头,后面接着解释器路径)

bash脚本编程之一  变量及变量类型_变量_13


要想要脚本独立执行脚本文件必须有执行权限

bash脚本编程之一  变量及变量类型_变量_14


变量名称:

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

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

  3、最好做到见名知意



练习:写一个脚本,完成以下任务

1、添加5个用户,user1.....user5

2、每个用户的密码同用户名,而且要求,添加密码完成后不显示passwd命令的执行结果信息

3、每个用户添加完成后,都要显示用户某某已经成功添加。

bash脚本编程之一  变量及变量类型_变量_15