Linux学习笔记(四)-bash基础特性

bash中的变量类型

根据变量的生效范围等标准:

 本地变量:生效范围为当前shell进程;对当前shell之外的其他shell进场,包括当前shell的子shell进场无效
 环境变量:生效范围当前shell进程和子进程
 局部变量:生效范围为当前shell进程中某代码片段(通常指函数)
 位置变量:$1,$2,...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数
 特殊变量:$?,$0,$*,$#,$@

本地变量

变量赋值:name='value'

 可以使用引用:
    value:
         (1)可以是直接字符;name="username"
        (2)变量引用:name="$username"
         (3)命令引用:name=COMMAND ,name=$(COMMAND)
        变量引用:${name},$name
            "":弱引用,其中的变量引用会被替换为变量值;
            '':强引用,其中的变量引用不会被替换为变量值,而保持原字符串;
        显示已定义的所有变量
            set
        销毁变量
            unset name

环境变量

 变量声明、赋值:
    export name=VALUE
    declare -x name=VALUE
    变量引用:$name,${name}
    显示所有环境变量:
        export
        env
        printenv
    销毁:
        unset name

    bash有许多内建的环境变量:PATH,SHELL,UID,HISISZE,HOME,PWD,OLD

变量命名法则:
    1、不能使程序中的保留字,例如if ,for;
    2、只能使用数字、字母及下划线,且不能一以数字开头
    3、见名知义:驼峰命名法(尽量不要用大写字母)

 只读变量:
    readonly name
    declare -r name

位置变量

 在脚本代码中调用通过命令行传递给脚本参数
    $1,$2,...:对应调用第1、第2等参数
    $0:命令本身
    $*:传递给脚本的所有参数
    $@:传递给脚本的所有参数
    $#:传递给脚本的参数的个数

 实例:判段给出的文件的行数
    #!/bin/bash
    linecount="$(wc -1 $1| cut -d'' -f1)"
    echo "$1 has $linecount line."

bash的配置文件

 按生效范围划分,存在两类:
    全局配置:
        /etc/profile
            /etc/profile.d/*.sh
        /etc/bashrc
    个人配置:       
        ~/.bash_profile
        ~./bashrc

 按功能划分,存在两类:
    profile类:为交互式登陆的shell提供配置
        全局:/etc/profile,/ect/profile.d/*.sh
        个人:~/.bash_profile
        功用:
            (1)用于定义环境变量
            (2)运行命令或脚本
    bashrc类:为非交互式登陆的shell提供配置
        全局: /etc/bashrc
        个人:~/.bashrc

        功用:
            (1)定义命令别名
             (2)定义本地变量

shell登录

交互式登录

    直接通过终端输入账号密码登录;
        使用“su - UserName"或”su -l UserName"切换的用户

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

非交互式登陆

 su UserName
    图型界面下打开的终端
    执行脚本

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

编辑配置文件定义的新配置的生效方式:
    (1)重新启动shell进程
    (2)使用source或.命令进程

bash中的算术运算

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

实现算术运算:
    (1)let var=算术表达式
    (2)var=$[算术表达式]
    (3)var=$((算术表达式))
    (4)var=$(expr arg1 arg2 arg3 ...)
        乘法符号有时候需要转义
        bash有内建的随机数生成器:$RANDOM

        增强型赋值:
            +=,-=,*=,/=,%=

            let varOPERvalue
                例如:let count+=1

        自增,自减:
            let var+=1
                let var++
            let var-=1
                let var--

练习(1)写一个脚本

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

    #!/bin/bash
    userid1=$(head -n 10 /etc/passwd | tail -n 1 | cut -d: -f3)
    userid2=$(head -n 20 /etc/passwd | tail -n 1 | cut -d: -f3)
    useridsum=$[$userid1+userid2]
    echo "uid sum:$useridsum"     

练习(2)写一个脚本

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

 #!/bin/bash
 spaceline1=$(grep "^[[:space:]]*$" $1 | wc -l)
 spaceline2=$(grep "^[[:space:]]*$" $2 | wc -l)
 echo "the sum of space line:$[$spaceline1+$spaceline2]"

bash测试

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

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

测试命令:
    test EXPRESSION
    [ EXPRESSION ]
    [[ EXPRESSION ]]
    Note:EXPRESSION前后必须有空白字符:

    bash的测试类型:
        数值测试:
            -gt:是否大于
            -ge:是否大于等于
            -eq:是否等于
            -ne:是否不等于
            -lt:是否小于
            -le:是否小于等于
    字符串测试:
            ==/=:是否等于
            >:是否等于
            <:是否小于
            !=:是否等于
            =~:左侧字符是否能够被右侧的PATTERN所匹配
                Note:此表达式一般用于[[ ]]中
            -z:”SIRING":测试字符串是否为空,空则为真,不空为假
            -n:”SIRING":测试字符串是否不空,不空则为真,空则为假

            Note:用于字符串比较式时的用到的操作数都应该使用引号;

    文件测试

bash自定义退出码

exit [n]:自定义退出状态码
    注意:脚本中一旦遇到exit命令,脚本会立即终止,终止退出状态取决于exit命令后面的数字,如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码;
|| 版权声明
作者:废权
链接:https://blog.yjscloud.com/archives/21
声明:如无特别声明本文即为原创文章仅代表个人观点,版权归《废权的博客》所有,欢迎转载,转载请保留原文链接。
THE END
分享
二维码
Linux学习笔记(四)-bash基础特性
bash中的变量类型 根据变量的生效范围等标准: 本地变量:生效范围为当前shell进程;对当前shell之外的其他shell进场,包括当前shell的子shell进场无效 环境……
<<上一篇
下一篇>>
文章目录
关闭
目 录