zoukankan      html  css  js  c++  java
  • 学习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:与文件系统及程序的限制关系

     

     

     

  • 相关阅读:
    jquery easy ui 学习 (8)basic treegrid
    jquery easy ui 学习 (7) TreeGrid Actions
    jquery easy ui 学习 (6) basic validatebox
    jquery easy ui 学习 (5) windowlayout
    jquery easy ui 学习 (4) window 打开之后 限制操纵后面元素属性
    提示“应用程序无法启动,因为应用程序的并行配置不正确”不能加载 System.Data.SQLite.dll
    visual studio 添加虚线的快捷键
    VS2010打开项目时,出现“已经在解决方案中打开了具有该名称的项目”问题的解决方案
    visual studio 编译时 出现 Files 的值 乱码
    微信 连接被意外关闭
  • 原文地址:https://www.cnblogs.com/xzxl/p/7609076.html
Copyright © 2011-2022 走看看