2.变量

作者: 互联网中的一个咸鱼 | 来源:发表于2019-08-05 07:49 被阅读0次

    变量

    yy=123 yy是一个变量名 123是变量值
    echo $yy 输出变量值

    变量设定的规则

    1.变量名与变量内容用=号进行连接,中间不能有空格
    2.变量名可以有英文数字和下划线,但不能以数字开头
    3.变量内容有空格可以用双引号进行组合
    4.单引号内的都只是普通字符,没有任何其他含义
    5.可用转意符 \ 将特殊符号(如 [Enter], , \, 空格符, 等)变成一般字符; 6.在一串命令中,想要获取其他命令的结果,可以使用()命令
    7.增加变量的内容,可以使用"变量名称"字符串或者${}字符
    8.想要变量在子进程执行,需要erport来使变量变成环境变量
    9.通常大写字符为系统默认变量,自定义变量使用小写字符
    10.取消变量的方式; unset varname

    环境变量

    常见环境变量

    • PATH,HOME,MAIL,SHELL,PWD,USERNAME,UID,ID
    • RANDOM 随机数
      echo $RANDOM
    PS1:(提示字符的设置)
    \d :可显示出“星期 月 日”的日期格式,如:"Mon Feb 2"
    \H :完整的主机名称。举例来说,鸟哥的练习机为“study.centos.vbird”
    \h :仅取主机名称在第一个小数点之前的名字,如鸟哥主机则为“study”后面省略
    \t :显示时间,为 24 小时格式的“HH:MM:SS”
    \T :显示时间,为 12 小时格式的“HH:MM:SS”
    \A :显示时间,为 24 小时格式的“HH:MM”
    @ :显示时间,为 12 小时格式的“am/pm”样式
    \u :目前使用者的帐号名称,如“dmtsai”;
    \v :BASH 的版本信息,如鸟哥的测试主机版本为 4.2.46(1)-release,仅取“4.2”显示
    \w :完整的工作目录名称,由根目录写起的目录名称。但主文件夹会以 ~ 取代;
    \W :利用 basename 函数取得工作目录名称,所以仅会列出最后一个目录名。
    # :下达的第几个指令。
    $ :提示字符,如果是 root 时,提示字符为 # ,否则就是 $
    

    env 列出所有环境变量
    set 列出系统所有变量
    export 使自定义变量转成环境变量
    子进程会继承父进程的环境变量,子进程不会继承父进程的自定义变量

    bash 的环境变量文件

    longin shell
    取得shell时需要完整的登入流程;特点是登入时需要用户帐号和密码
    non-login shell
    取得shell时不需要再次输入帐号和密码的情况下,所得到的 shell

    longin shell 会读取以下两个文件:

    ·/etc/profile· :这是系统整体设定,最好不要修改
    ·/.bash_profile或/.bash_login或~/.profile` :属于个人的配置文件

    /etc/profile 会主动依序调用以下脚本文件:

    /etc/inputrc :定义快捷键

    /etc/profile.d/*sh :定义bash操作接口颜色、语系、命令别名等

    etc/locale.conf :定义系统的默认语系

    bash 在读完 /etc/profile 后,接下来会读取以下3个文件,且只会读去一个,会按照以下顺序优先读取
    ~/.bash_profile //会调用 ~/.bashrc ,
    也会有新的环境变量在下面的文件中被添加
    ~/.bash_login
    ~/.profile
    最终,~/.bashrc 才是最后被读入到系统环境中的文件
    让这些环境变量文件中的变量等设置及时在当前 shell 终端中生效,有下两种方式
    source ~/.bashrc
    或者
    . ~/.bashrc

    no-longin shell 当取得 no-longin shell 时,该 shell 仅会读取 ~/.bashrc 文件 而~/.bashrc 最后又会调用 /etc/bashrc
    /etc/bashrc 的作用:
    • 依据不同的UID定义出 umask 值
    • 依据不同的UID定义出提示符(就是PS1变量)
    • 呼叫 /etc/profile.d/*.sh 的设定
    其他的相关配置文件
    • /etc/man.config
    这个文件最重要的就是定义了MANPATH 这个变量,它定义了man page 的路径;在以tarball的方式安装软件时有用
    • ~/.bash_history
    历史命令记录文件;记录的数量与HISTFILESIZE变量有关。在/etc/profile里
    • ~/.bash_logout
    记录了当我注销bash后,系统再帮我做完什么动作后才离开的。

    预定义变量

    $!    上一次后台命令对应的进程号
    $?   上一次命令是否执行成功    0代表成功   !0 代表失败
    $$   当前bash的进程号ID
    

    键盘读取

    read

    -p    后面可以接上提示字符
    -t     后面可以跟秒数
    如果有-t   ,将其写在最前面
    

    数组

    var=(a b c d)  定义数组  以空格隔开
    echo ${var[0]}  输出第一个数组的值
    echo ${var[*]}  输出数组所有的值
    echo ${var[@]} 输出所有
    echo ${#var[@]} 输出数组的长度
    

    declare 关联数组

    declare -A  查询所有关联数组
    declare -A array  定义一个名为array的关联数组
    array[name]=shark   将shark赋值给array数组的'name'值
    
    

    六、变量内容的删除、取代与替换
    • 删除
    先让小写的 path 自订变量设置的与 PATH 内容相同
    [dmtsai@study ~]path={PATH}
    [dmtsai@study ~]echo{path}
    /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/shark/bin

    删除最后一个

    echo ${path%:*}

    % 从字符串的后面开是进行匹配删除,但匹配到第一个时就结束匹配。
    :* 就是需要进行匹配的字符串 , : 是普通字符串 * 是通配符,代表任何数量的任意字符串。
    所以下面的红色字体的字符串将会匹配后进行删除
    /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/shark/bin

    删除第一个

    接着上例的变量进行操作
    echo ${path#*:}

    是从前面开始匹配删除,匹配到道理和上面的 % 同样的道理
    ${path#*:} 就是 从变量值的最前面开始匹配,直到遇到第一个 : 结束
    所以下面的红色字体会被匹配后删除
    /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/shark/bin

    • 取代和替换
    image

    以上不需要都掌握,需要记住下面这个

    var=${str:-expr}

    strvar 可以是相同的字符串。比如 inpu_date=${inpu_date:-expr}

    expr 可以是任意合法的表达式,比如一个字符串,一个子 shell 的命令 $(date +%F)

    示例,假如希望用户输入一个日期,当用户没有输入时,就给一个默认值,这里给的是当天的日期

    read  -p  "输入日期>:"   input_date
    
    input_date=${input_date:-$(date +%F)}
    
    echo "当前的日期是:${input_date}"
    

    七、时间运算

    // 计算 3 小时之后是几点几分
    date +%T -d '3 hours'
    // 任意日期的前 N 天,后 N 天的具体日期
    date +%F -d "20190910 1 day"
    date +%F -d "20190910 -1 day"
    // 计算两个日期相差天数, 比如计算生日距离现在还有多少天
    d1=$(date +%s -d 20180728)
    d2=$(date +%s -d 20180726)
    echo $(((d1-d2)/86400))
    

    相关文章

      网友评论

          本文标题:2.变量

          本文链接:https://www.haomeiwen.com/subject/gzdrdctx.html