Linux下Bash编程之变量详解(一)

1.语言分类:

 1.1.静态语言:编译型语言

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

         编写的程序事先转换成可执行格式

         代表有:C、C++、JAVA、C#

   动态语言:解释型语言

     弱类型:变量用时声明,甚至不区分类型;

         编写的程序边解释边执行

         代表有: PHP、SHELL、python、perl

 1.2.面向过程编程语言:代表有 Shell, C

 1.3.面向对象编程语言: 代表有 JAVA, Python, perl, C++

 结论:shell属于弱类型编程语言

2.shell编程各变量名称解释

变量:其实是内存空间,即叫命名内存空间

    而内存:是编址的存储单元

变量类型:事先确定数据的存储格式和长度,有如下分类:

    字符

    数值:分整型和浮点型

   布尔值:真、假

变量名称命令規範:

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

2、不與环境变量重名;

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

3.bash变量类型:

本地变量:set VARNAME=VALUE: 作用域为当前shell进程;

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

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

      第一种表法方法:export VARNAME=VALUE

      第二种表法方法:VARNAME=VALUE && export VARNAME

位置变量:$1, $2, ...表示返回参数的值 

      ${1},${2}表示返回参数的值

特殊变量:$?: 上一个命令的执行状态返回值;

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

         (1):程序执行结果 

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

               0: 为正确执行

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

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

撤消变量:unset VARNAME

查看当shell中变量:set  含环境和本地变量

查看当前shell中的环境变量有以下3个命令:

 printenv  env   export

4.脚本:按需将一大堆简单小命令,结合流程控制机制实现复杂的源程序

 shebang: magic number

 注意:(1)脚本在执行时会启动一个子shell进程,命令行中启动的脚本会继承当前shell环境变量;

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


编码脚本基本格式如下:

#!/bin/bash

# 注释行,不执行


5.1 举例说明写一个如下创建用户脚本,完成以下任务:

  1、添加user1用户,增加密码完成后不显示passwd命令所有输出信息

  2、每个用户添加完成后,最好显示用户已经成功添加的提示信息;

5.1.1:vim useradd.sh 创建一个脚本文件:添加内容如下

#!/bin/bash

USERNAME=user1

useradd $USERNAME

echo "$USERNAME" | passwd --stdin $USERNAME &> /dev/null

echo "Add  $USERNAME sucessfully"

5.1.2:保存useradd.sh文件后

    chmod a+x useradd.sh    增加执行权限

    ./useradd.sh          执行脚本创建用户


5.2 举例说明写一个如下删除用户脚本,完成以下任务:

  1、删除user1用户,并且删除其家目录,不要显示输出结果;

  2、用户删除成功后,最好显示用户已经成功删除的提示信息;

5.2.1:vim userdel.sh 创建一个脚本文件:添加内容如下

#!/bin/bash

USERNAME=user1

userdel -r $USERNAME &> /dev/null

echo "del user $USERNAME successfully"

5.2.2:保存userdel.sh文件后

    chmod a+x userdel.sh   增加执行权限                               

   ./userdel.sh         执行脚本删除用户