bash的配置文件

    按生效范围划分:存在两类

        全局配置:

            /etc/profile

                /etc/profile.d/*.sh

            /etc/bashrc

        个人配置:

            ~/.bash_profile

            ~/.bashrc


    按功能划分,存在两类:

        profile类:为交互式登录的shell提供配置

            全局:/etc/profile,/etc/profile.d/*.sh

            个人:~/.bash_profile

            功用:

                1.用于定义环境变量

                2.运行命令或脚本

        bashrc类:为非交互式登录的shell提供配置

            全局:/etc/bashrc

            个人:~/.bashrc

            功用:

                1.定义命令别名

                2.定义本地变量


    shell登录:

        交互式登录:

            1.直接通过终端输入账号密码登录

            2.使用"su - username"或"su -l username"切换的用户

        读取顺序

        /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

        非交互式登录:

            1.su username

            2.图形界面下打开的终端

            3.执行脚本

        ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh


    编辑配置文件定义的新配置的生效方式:

        1.重新启动shell进程

        2.使用source或.命令进程

            Note:使用source或.执行会有些副作用,比如设定在~/.bash_profile中的个人环境变量会重复赋值


bash中的算数运算

    +,-,*,/,%,**......

# help let

    实现算术运算:

        1.let var=算式表达式

        2.var=$[算术表达式]

        3.var=$((算术表达式))

        4.var=$(expr arg1 arg2...)

                乘法符号须转义 例如:mul=$(expr $num1 \* $num2)

        bash有内建的随机数生成器:$RANDOM(生成1-32767的随机数)

        增强型赋值:

            +=,-=,*=,/=,%=

            let varOPERvalue

            例如:

            count=$[$count+1]可以写成let count+=1或count++

            自增,自减

                let var+=1

                    let var++

                let var-=1

                    let var--


    练习1:写一个脚本

        计算/etc/passwd文件中的第10个用户和第20个用户的ID之和

    练习2:写一个脚本

        传递两个文件路径路径作为参数给脚本,计算这两个文件中所有空白行之和

    练习3:统计/etc,/var,/usr目录共有多少个一级子目录和文件


条件测试:

    判断某需求是否满足,需要由测试机制来实现:

        Note:专用的测试表达式需要由测试命令辅助完成测试过程

    测试命令:

        test EXPRESSION

        [ EXPRESSION ]

        ` EXPRESSION `

        Note:EXPRESSION前后必须有空白字符

    

    bash的测试类型:

        数值测试:

            -gt:是否大于

            -ge:是否大于等于

            -eq:是否等于

            -ne:是否不等于

            -lt:是否小于

            -le:是否小于等于

        字符串测试:

            ==/=:是否等于

            >:是否大于

            <:是否小于

            !=:是否不等于

            =~:左侧的字符串是否能够被右侧的PATTERN所匹配到

                Note:此表达式一般用于` `中

            -z "STRING":测试字符串是否为空,空则为真,不空则为假

            -n "STRING":测试字符串是否不空,不空为真,空则为假

            Note:用于字符串比较时用到的字符串要使用引号


bash自定义退出状态码

    exit [n]:自定义退出状态码

        注意1:脚本中一旦遇到exit命令,脚本会立即终止,终止退出状态取决于exit命令后面的数字

        注意2:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码


练习:写一个脚本

    接受一个文件路径作为参数:

        如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出

        如果参数不小于1,则显示第一个参数所指向的文件的空白行数