shell编程笔记一

shell编程:
bash变量类型:
    环境变量
        本地变量(局部变量)
        位置变量
        特殊变量(内置)

本地变量:
    varname=value:作用域为整个bash进程可以使用;
        变量命名规范:
        1. 只能含字母、数字和下划线,并且以字母和下划线开头
        2. 最好不要跟系统已有的环境变量重名
        3. 见名知意

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

环境变量:作用域为当前shell进程及其子进程,不能影响到其父进程;
    export varname=value “导出”,如果变量已经定义可以只是用变量名 export varname,即
        1. export varname=value
        2. varname=value
            export varname
        脚本在执行命令时会启动一个子shell环境变量:
        系统自动执行的脚本(非命令行启动)就需要自我定义需要的个环境变量;


位置变量:
     $1,$2,$3,……


特殊变量:
    $?:上一个命令执行状态的返回值:
   
        程序执行可能有两种返回值:
                1. 程序执行结果
                2. 程序状态返回吗(0-255)
                     0           则为执行正确
                    1-255    则执行出错(1,2,127系统预留);


     bash:

引用变量:${varname},括号可以省略


撤销变量:
    unset varname

查看当前shell中的变量:
    set
        包括环境变量和本地变量

查看当前shell中的环境变量:
        1. printenv
        2. env
        3. export

条件判断:
    如果用户不存在:
         添加用户,给密码并显示添加成功;
    否则
         显示用户已经存在,没有添加;

bash中条件判断:
    条件测试类型:
        1. 整数测试
        2. 字符测试
        3. 文件测试


    条件测试的表达式:
        1. [ expression ]
        2. [[ expression ]]
        3. test expression
    整数比较:
        -eq:测试两个整数是否相等;比如 $A -eq $B,如果A与B变量的值相等,则返回0,否则返回非0值
        -ne:测试两个整数是否不等;相等为假,不等为真
        -gt: 测试一个数是否大于另一个数;大于为真,否则为假
        -lt:  测试一个数是否小于零一个数;小于为真,否则为假
        -ge:测试一个数是否大于或等于另一个数;大于或等于为真,否则为假
        -le: 测试一个数是否小于或等于另一个数;小于或等于为真,否则为假

    命令间的逻辑关系:
        逻辑与:&&
                第一个条件为假时,第二个条件不会被执行
                第一个条件为真时,第二个条件会被执行,作为结果
        逻辑或:||
                第一个条件为真时,第二个条件不会执行,结果为真
                第一个条件为假时,第二个条件会被执行,作为结果


  1.单分支的if语句:
        if 判断条件; then
                statement1
                statement2
                ……
        fi
  2. 双分支的if语句:
        if 条件判断; then
                statement1
                statement2
                ……
        else
                statement1
                statement2
                ……
        fi

        如果then与if不在同一行,则“;”可以省略,如果在同一行,则不可省略。fi必须独占一行

如果用户存在,就显示用户已存在;否则,就添加此用户
         id user1 && echo "user1 exist" || useradd user1

如果用户不存在,就添加;否则显示其已经存在
         ! id user1 && useradd user1 || echo "user1 exists."

如果用户不存在,就添加并设置密码,否则,显示其已经存在:
          ! id user1 && useradd user1 && echo "user1" | passwd --stdin user1 || echo "user1 exists."

shell脚本练习:
练习一要求:
        1. 添加5个用户,user1, user2, ……, user5;
        2. 每个用户的密码同用户名,且要求,添加密码完成后不显示passwd命令的执行结果信息;
        3. 最后显示当前系统上一共有多少个用户;
        #useradd user1
        #echo "user1" | passwd --stdin user1 &> /dev/null
        #echo "Add user1 successfully."
        ! id user1 &> /dev/null && useradd user1 && echo "user1" | passwd --stdin user1 &> /dev/null || echo "user1 exists."
        ! id user2 &> /dev/null && useradd user2 && echo "user1" | passwd --stdin user2 &> /dev/null || echo "user2 exists."
        ! id user3 &> /dev/null && useradd user3 && echo "user1" | passwd --stdin user3 &> /dev/null || echo "user3 exists."
        ! id user4 &> /dev/null && useradd user4 && echo "user1" | passwd --stdin user4 &> /dev/null || echo "user4 exists."
        ! id user5 &> /dev/null && useradd user5 && echo "user1" | passwd --stdin user5 &> /dev/null || echo "user5 exists."

        USERS=`wc -l /etc/passwd | cut -d: -f1`
        echo "$USERS users"

练习二要求:
        给定一个用户,如果其UID为0,就显示此为管理员用户;否则,就显示其为普通用户;
        NAME=user1
        USERID=`id -u $NAME`
        [ $USERID -eq 0 ] && echo "root" || echo "common user."



算数运算:
A=4
B=4
        1. let 算数运算表达式
                let C=$A+$B
        2. $[算数运算表达式]
                C=$[$A+$B]
        3. $((算术运算表达式))
                C=$(($A+$B))
        4. expr 算数运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用
                C=`expr $A + $B`

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