• 学习bash——变量


    一、什么是变量

      变量:一个字眼,用来替代另一个比较复杂或者是容易变动的数据。

      变量的优势:可变性、方便性

    二、变量内容的设置

    关键词:变量,变量名称,变量的内容(我默认将变量与变量名称等价)

      方法:变量=变量的内容

      注:一个变量未被设置内容时,默认的内容是“空”的。

    【变量的设置规则】

    1. 变量与变量的内容以一个等号“=”来连接
    2. 等号两边不能直接接空格符
    3. 变量名称只能是英文字母与数字,并且开头字符不能是数字
    4. 变量内容若有空格符可使用双引号(特殊字符仍是特殊字符)或单引号(特殊字符仅为纯文本)将变量内容结合起来
    5. 可用转移字符“”将特殊符号(如[Enter]、$、、空格符、!等)变成一般字符
    6. 在命令中还需要引用其他命令时,可使用“$(命令)”或“``命令`”
    7. 增加变量内容时,可用“"$变量名称"”或“${变量}”累加内容
    8. 取消变量的方法为“unset 变量名称”

    【示例区】

      设置变量内容:path=${PATH}    //将PATH内容赋给变量path

      双引号保留特殊符号:var="lang is $LANG"      //打印结果为lang is en_US

      单引号仅为一般字符:var='lang is $LANG'      //打印结果为lang is $LANG

      规则6的示例:version=$(uname -r)          //命令uname -r打印内核版本

      追加变量内容:PATH="$PATH":/home/bin       //红色部分为追加内容

    三、显示变量的内容

    关键词:变量的内容

      命令:echo

      注意点:变量的内容在被显示时,变量前面必须要加上字符“$”才行

    ps:请在屏幕上显示出你的环境变量PATH。

      法一:echo $PATH

      法二:echo ${PATH}

    四、环境变量

    摘要:查看环境变量、常用环境变量、PS1、$、?

    1. 查看环境变量

      命令:env    //列出目前shell环境下的所有环境变量与内容

    2. 常见环境变量

     HOME:HOME=/home/liuyu

     解释:HOME代表用户的主文件夹。我们使用命令“cd ~”或“cd”回到用户主文件夹,就是使用这个变量,有很多程序都可能会用到这个变量的值。

     SHELL:SHELL=/bin/bash

     解释:它告知我们目前这个环境使用的shell是哪个程序?Linux是默认使用/bin/bash的。

     PATH:PATH=/home/liuyu/bin:/home/liuyu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

     解释:就是执行文件查找的路径,目录与目录中间以冒号分隔,由于文件的查找是依序由PATH的变量内的目录来查询,所以目录的顺序也是很重要的。

     MAIL:MAIL=/var/spool/mail/liuyu

     解释:当我们使用mail这个命令在收信时系统会去读取的邮件信息文件。

     HISTSIZE:HISTSIZE=1000

     解释:这个与“历史命令”有关,即文件~/.bash_history可以记录命令的条数

    3. PS1(提示符的设置)

      PS1就是我们的“命令提示符”。

      当我们每次按下[Enter]按键去执行某个命令后,最后要再次出现提示符时,就会主动去读取这个变量值了。

      PS1=' [u@h W]$ '    //PS1的内容是一些特殊符号,这些特殊符号可以显示不同的信息

    【符号意义】

    • u:目前用户的账号名称
    • h:仅取主机在第一个小数点之前的名字
    • W:利用basename函数取得工作目录名称,所以仅会列出最后一个目录名
    • w:完整的工作目录名称,由根目录写起的目录名称。但主文件夹会以~替代
    • $:提示符。如果是root时,提示符为#,否则就是$
    • @:显示时间,为12小时格式的“am/pm”样式
    • #:执行的第几个命令

    4. $(关于本shell的PID)

      $本身也是个变量。这个代表的是目前这个shell的线程代号,即是所谓的PID。

      命令:echo $$        //显示我们的shell的PID

    5. ?(关于上个执行命令的回传码)

      ?也是一个变量。

      这个变量是上一个执行的命令所回传的值。

      当我们执行某些命令时,这些命令都会回传一个执行后的代码。

      成功执行,则回传一个0值;失败执行,则回传任意非0值。

    五、语系变量

    关键词:语系,语系变量

    1. 查看我们的Linux支持的语系

      命令:locale -a

    2. 常见语系

      zh_CN.utf8、en_US.utf8、C

    3.  查看各个环境下使用的编码

      命令:locale

      显示结果:

    LANG=zh_CN.UTF-8           //主语言的环境
    LANGUAGE=zh_CN:zh
    LC_CTYPE="zh_CN.UTF-8"        //字符(文字)辨识的编码
    LC_NUMERIC="zh_CN.UTF-8"       //数字系统的显示信息
    LC_TIME="zh_CN.UTF-8"         //时间系统的显示数据
    LC_COLLATE="zh_CN.UTF-8"       //字符串的比较与排序等
    LC_MONETARY="zh_CN.UTF-8"      //币值格式的显示等
    LC_MESSAGES="zh_CN.UTF-8"      //信息显示的内容,如菜单、错误信息等
    LC_ALL=                  //整体语系的环境

      上面显示出许多语系变量及其变量内容,我们可以自定义每个语系变量的内容,如果有语系变量未设置,那么这些语系变量将会被LANG或LC_ALL这两个变量所替代。

    4. 使语系变量内容的设置永久有效

      在命令行设置语系变量的内容仅在此次生效,如果要永久有效,我们就需要修改相应的配置文件。

      整体系统默认的语系定义:/etc/sysconfig/i18n

    六、read

      之前我们的变量内容都是直接在命令行直接设置的,现在我们要让用户能够经由键盘输入变量的内容。

      命令:read [-pt] 变量    //-p后面接提示符,-t后面接等待的秒数

     

    七、declare

      bash中变量的默认类型为字符串,我们可以使用declare声明变量的类型。

      命令:declare [-aixr] 变量  //-r将变量设置为readonly类型(不可被更改内容)

    八、数组(array)变量类型

      设置方式:数组名[index]=content

      读取数组:${数组}

    ps:设置var[1]~var[3]的变量,并打印内容

    var[1]="small min"
    var[2]="big min"
    var[3]="nice min"
    echo "${var[1]}, ${var[2]}, ${var[3]}"
    

      

    九、变量内容的删除、替换

      之前关于变量内容的设置都指整个变量内容,我们就要讲讲对变量的内容进行微调。

      先抛出一张表:

    变量设置方式 说明
    ${变量#关键字} 若变量内容从头开始的数据符合“关键字”,则将符合的最短数据删除
    ${变量##关键字} 若变量内容从头开始的数据符合“关键字”,则将符合的最长数据删除
    ${变量%关键字} 若变量内容从尾向前的数据符合“关键字”,则将符合的最短数据删除
    ${变量%%关键字} 若变量内容从尾向前的数据符合“关键字”,则将符合的最长数据删除
    ${变量/旧字符串/新字符串} 若变量内容符合“旧字符串”,则第一个旧字符串会被新字符串替换
    ${变量//旧字符串/新字符串} 若变量内容符合“旧字符串”,则全部的旧字符串会被新字符串替换
    • 示例:echo $PATH

    打印:/usr/liuyu/sbin:/usr/liuyu/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/local/sbin:/usr/bin:/root/bin

    • 示例:echo $MAIL

    打印:/var/spool/mail/liuyu

    1. 变量内容的部分删除

    • 题目1:删除PATH变量内容中的前两个目录

    即删去目录中的红色部分:/usr/liuyu/sbin:/usr/liuyu/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/local/sbin:/usr/bin:/root/bin

      命令:echo ${PATH#/*liuyu/bin:}

    • 题目2:删去PATH变量内容中的第一个目录

    即删去目录中的红色部分:/usr/liuyu/sbin:/usr/liuyu/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/local/sbin:/usr/bin:/root/bin

      命令:echo ${PATH#/*:}

    • 题目3:删除PATH变量内容中所有目录,仅保留最后一个目录

    即删去目录中的红色部分:/usr/liuyu/sbin:/usr/liuyu/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/local/sbin:/usr/bin:/root/bin

      命令:echo ${PATH##/*:}

    • 题目4:删除PATH变量内容中的最后一个目录

    即删去目录中的红色部分:/usr/liuyu/sbin:/usr/liuyu/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/local/sbin:/usr/bin:/root/bin

      命令:echo ${PATH%:*bin}

    • 题目5:删除PATH变量内容中所有目录,仅保留第一个目录

    即删去目录中的红色部分:/usr/liuyu/sbin:/usr/liuyu/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/local/sbin:/usr/bin:/root/bin

      命令:echo ${PATH%%:*bin}

    • 题目6:仅保留MAIL变量中最后一个文件名

      即删去内容中的红色部分:/var/spool/mail/liuyu

      命令:echo ${MAIL##/*/}

    • 题目7:仅删掉MAIL变量中最后一个文件名

      即删去内容中的红色部分:/var/spool/mail/liuyu

      命令:echo ${MAIL%/*}

    2. 变量内容的部分替换

      题目1:将PATH变量内的sbin都替换为SBIN

    即修改目录中的红色部分:/usr/liuyu/sbin:/usr/liuyu/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/local/sbin:/usr/bin:/root/bin

      命令:echo ${path//sbin/SBIN}

      题目2:将PATH变量内的第一个sbin替换为SBIN

    即修改目录中的红色部分:/usr/liuyu/sbin:/usr/liuyu/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/local/sbin:/usr/bin:/root/bin

      命令:echo ${path/sbin/SBIN}

    十、变量的测试与内容替换

    1. 判断某变量是否存在

      命令:echo $变量

      结果:若出现变量内容则表示该变量存在;若出现空白,则变量可能不存在,也可能是空字符串。

    2. 变量内容的替换

    • 题目:测试一下是否存在username这个变量,若不存在则给予username内容为root

      命令:username=${username-root}

      解读:若变量username存在(即使其内容为空字符串),则不改变其内容;否则将其内容改变为root。

    • 题目:测试一下是否存在username这个变量,若不存在或为空串则给予username内容为root

      命令:username=${username:-root}

      解读:username内容为空串时,其内容也会被替换为root;而如果变量存在且内容非空串,则不改变。

    附录

    1. set:列出所有的变量及其内容
    2. declare:同set
    3. ulimit:与文件系统及程序的限制关系

     

     

     

  • 相关阅读:
    Ubuntu – vlan & bridge configuration
    Python 腾讯云宝塔面板 B站获取经验脚本 部署 自动发邮件
    struts1的总结
    在oracle 中自己所做的作业。。
    昨天上课学到的东西
    今天关于一些学习了国际化的知识
    学习的第二个框架hibernate
    我学习struts的一些心得!
    hibernate的几种状态的详解
    关于hibernate的,另外一些应用!
  • 原文地址:https://www.cnblogs.com/xzxl/p/7609076.html
Copyright © 2020-2023  润新知