静态语言:编译型语言

          强类型(变量) 事先转换成可执行格式

          c c++ java c#

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


动态语言:解释型语言

          弱类型

          边解释边执行

          php shell python

          弱类型语言,变量声明时,甚至不区分类型



编程能力:

      脚本编译


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


    1Byte=8b   1(Byte)字节=8位(bit)

     字符型

     数值型

          整型

          浮点型



Bash变量类型

      环境变量

      本地变量(局部变量)

      位置变量

      特殊变量:$?


本地变量:

     NAME=cary   ----定义变量

     echo $NAME  ----引用变量

     Local VARNAME=VALUE  ----局部变量,作用域当前代码段


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

     export varname=value    ----定义环境变量用export 导出关键字


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

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

    系统自动执行的脚本(非命令行)


在SHELL语言中,‘’单引号不做变量替换,里面是什么就输出什么。

                “”双引号做变量替换,里面有变量做变量替换输出


输出重定向

>  ---覆盖追加

>> ---追加不覆盖


/dev/null --数据黑洞



撤销变量:unset varname   


查看当前shell中的变量:set


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


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


脚本的格式:脚本必须要以一个魔数开头

#!/bin/bash

其他行数以#开头都是表示注释


脚本的执行:脚本的执行必须有X的执行权限,并且需要指明路径


练习:写一个脚本

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

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

3.每个用户创建完成后,显示添加账号创建成功

#!/bin/bash

useradd user1

echo "user1" |passwd --stdin user1 >/dev/null

echo "add user1 successfully"



条件判断:

     如果用户存在

        添加用户,给密码并显示添加成功

     否则

        显示已经存在,没有添加

bash 中如何实现条件判断

条件测试类型:

     整数测试

     字符测试

     文件测试

条件测试的表达式:

     [ expression ]

     test expression


整数比较:

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

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

       -gt :测试一个数是否大于另一个数:大于,为真,否则,为假

       -lt :测试一个数是否小于另一个数,小于,为真,否则,为假

       -ge :大于或等于

       -le :小于或等于


命令的逻辑关系:

     逻辑与 &&:第一个条件为假时,第二个条件就不在判断,最终结果已经有

                如果第一个条件为真是,第二个条件还需要判断

     逻辑或 || :第一个条件为真时,第二个条件不执行

                 如果第一个条件为假时,还需要执行第二个条件

#!/bin/bash

!id user1 &>/dev/null && useradd user1 && echo "user1" |passwd --stdin user1 &>/dev/null ||echo "user1 exists"

!id user2 &>/dev/null && useradd user2 && echo "user2" |passwd --stdin user2 &>/dev/null ||echo "user2 exists"

!id user3 &>/dev/null && useradd user3 && echo "user3" |passwd --stdin user3 &>/dev/null ||echo "user3 exists"

USERS=`wc -l /etc/passwd |cut -d: -fl`

echo "$USERS USERS"


条件判断,控制结构:

单分支的if语句

  if 判断条件; then

      statement1

      statement2

      ....

  fi


eg:

  #!/bin/bash

  NAME=user1

  if id $NAME &>/dev/null;then

     echo "$NAME exsits"

  fi


双分支的if语句

   if 判断条件; then

      statement1

      statement2

      .......

    else

       statement3

       statement4

       ......

    fi



  eg:

   NAME=cary.qin

   if id $NAME &>/dev/null;then

      echo "$NAME exists"

   else

       useradd $NAME

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

       echo "add finished"

   fi


``   ----反引号 命令的执行结果,把名称执行出的内容提供出来



shell的数值运算

A=3

B=6

1.  let 算术运算表达式

 let c=$A+$B


2.  $[算术运算表达式]

    c=$[$A+$B]



3.$((算术运算表达式))

  c=$(($A+$B))