变量及shell编程

编程能力:    

    脚本编程

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

高级语言:

    静态语言:编译型语言

        不需要借助额外的二进制,需要一个编译器,直接转换为二进制运行的。

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

        关键字:

        事先转换成可执行格式

        c、c++、java、c#

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

        弱类型语言:变量随时(用时)声明,不区分类型

        边解释边执行

        asp asp.net php shell python perl

面向过程:shell ,c,perl,

面积对象:java,python,perl,c++

变量类型:直接决定了变量的储存格式,用来确定数据的存储格式和长度

        字符

        数值

        时期

        真假型

逻辑运算:与(乘)、或、非、异或

1:真

0:假

1&0=0

0&1=0

0&0=0

1&1=1

或:只一一个为真就为真,同时为假就为假

非:!真=假 !假=真

异或:操作数相同者为假, 不同者为真,相同者为零,否者为1

与:只要有一个为假,结果为假

或:只要有一个为真,结果为真

            整形

            浮点型 11.23 1.123*10^1 | 0.1123*10^2

变量:内存空间,命名的内存空间,

变量名称:

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

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

3、最好做到见名知义

内存:编址的存储单元

进程:

Bash变量类型:

引用变量:${VARNAME},默认{}可以省略,例:

    ANIMAL=pig

    echo "There are some ${ANIMAL}s."

    1、环境变量:

        作用域为当前shell进程及其子进程

        exprot VARNAME=VALUE "导出"

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

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

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

    2、本地变量(局部变量)

        bash:进程的变量

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

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

    3、位置变量

        $1,$1,$2......

    4、特殊变量(Bash内置的,也称系统变量)

        是为了保存特殊数据的,例:$?:上一个命令的执行状态返回值;

    程序执行结果

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

        0:正确执行

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

撤消变量:

    unset VARNAME

查看当前shell中变量:

    set (包括环境变量和本地变量)

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

    printenv

    env

    export

一个变量对应多个值:

    ANIMAL=pig:dog:goat 或者:ANIMAL=$ANIMAL:pig

输出重定向:

>

>>

2>

2>>

&> 同时重定向

/dev/null

id student &> /dev/null 

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

#!/bin/bash

#注释行,不执行

Bash中如何实现条件判断?

    条件测试类型:

    1、整数测试

    2、字符测试

    3、文件测试

条件测试的表达式:

    [ expression ]

    [[ expression ]]

    test expression

整数比较:

    需要两个操作数

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

         [ $A -eq $B ]

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

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

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

    -ge:大于或

    -le:小于或等于

命令间的逻辑关系:

    逻辑与:&& id user1 &> /dev/null && echo "hello user1"

        第一个条件为假时,第二个条件不用判断,最终结果已经有了。

        第一个条件为真时,第二个条件必须得判断

    逻辑或:||

!id user6 && useradd user6 前面为假就不执行,为真就执行

id user6 || useradd user6 如果前面为真就不执行,为假就执行

如果用户存在,就显示用户已存在,否则就添加此用户:

id user1 && echo "use1 exists" || useradd user1

如果用户不存在,就添加,否则显示其已经存在

! id user1 && useradd user1 || echo "user1 exists"

如果用户不存在,添加并且给密码,否则,显示其已经存在;

!id user1 && useradd user1 && echo "user1" | passwd --stdin user1 || echo "user1 exists"

例:

#!/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 user1 &> /dev/null || echo ""user3 exists."

USERS=`wc -l /etc/passwd | cut -d‘‘ -f1

echo "$USERS users"


#!/bin/bash

NAME=user1

USERID=`id -u $name`

[ $USERID -eq 0 ] && echo "This is root" || echo "This is not root" 

条件判断,控制结构

单分支if语句:

    if判断条件;then

        statement1

        statement2

        ...

    fi

例:

#!/bin/bash

NAME=user1

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

    ehco "$NAME exists."

fi


双分支的if语句:

if 判断条件;then

    statement1

    statement2

    ...

else

    statement1

    statement2

    ...

fi

例:

#!/bin/bash

NAME=user1

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

    ehco "$NAME exists."

else

    echo "$NAME not exist"

fi


#!/bin/bash

NAME=root

if [ `id -u $NAME`  -eq 0 ]; then

    echo "This is Admin"

else

    echo "This is not Admin"

fi


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。