编程能力:    
    脚本编程
    编程语言:机器语言,汇编语言,高级语言
高级语言:
    静态语言:编译型语言
        不需要借助额外的二进制,需要一个编译器,直接转换为二进制运行的。
        强类型(变量):变量在使用前, 必须事先声明,甚至还需要初始化
        关键字:
        事先转换成可执行格式
        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
原文:http://leozhenping.blog.51cto.com/10043183/1630649