美文网首页
Linux 之 Bash -- shell 的变量功能(一)

Linux 之 Bash -- shell 的变量功能(一)

作者: 熊猫人和熊猫猫 | 来源:发表于2019-04-21 16:31 被阅读0次

变量 是bash环境中非常重要的一个东西,因为要知道Linux是多人多任务的环境,每个人登入系统都能取得一个 bash shell。例如:使用 bash下达mail这个命令就可以接收自己的邮件,但是 bash 是如何知道你的邮件信箱是哪个文件?这就需要“变量”的帮助了。

1. 认识变量

如果使用 y=ax+b 来理解变量,可以这么理解 --(y就是变量;(ax+b)就是变量内容)
所谓变量,就是用一个简单的“字眼”来取代另一个比较复杂或容易变动的数据。

1.1 变数的可变性与方便性

如图所示,由于系统已经帮我们规划好MAIL这个变量,所以用户只要知道mail这个指令如何使用即可,mail会主动的取用MAIL这个变量,就能够如下所示的取得自己的邮箱信件了。


程序、变量与不同用户的关系

1.2 影响 bash 环境操作的变量

由于在Linux System下面,所有的线程都需要一个执行码,在正确的登入Linux之后,这个时候你就有一个bash的执行程序,从而开始与系统沟通。
同时,由于系统需要一些变量来提供它数据的存取(或者是一些环境的设定参数值,例如是否要显示彩色等),所以就有一些所谓的“环境变量”需要读入系统中了。例如,PATH、HOME、MAIL、SHELL等都是很重要的。

attention: 为了区别与自定义变量的不同,环境变量通常以 大写字符 来表示

1.3 脚本程序设计(shell script )

再给“变量”一个简单的定义:变量就是以一组文字或符号等,来取代一些设定或者是一串保留的数据,良好的程序设计师都会善用变量的定义。
如下:


变量应用于 shell script

Tips: "显示变量"使用echo这个指令

2.变量的取用与设定

2.1 变量的取用 (echo)

“变量的取用”,听起来很高大上,实际上就是使用echo命令查看变量的内容。
只是需要在变量名称前面加上$,或以${变量}的方式来取用都可以。写这么多字不如来几个实例:
👇这张图来自于我的Mac终端,由于Mac终端就是使用bash,因此拿它直接练手也很方便(如果有服务器更好哦~)。

echo 查看变量

图中,我通过echo 查看 HOME,MAIL,PATH这3个变量的内容,由于我的系统还没有设定过"MAIL"这个变量,所以就没有引出来内容。

2.2 变量的设定规则

  • 变量与变量内容以一个等号“=”来联结 eg:name=panda
  • 等号两边不能直接接空格符,不然错误!eg: name = panda
  • 变量名称只能是英文字母与数字,但是开头字符不能是数字 eg:1name=panda
  • 变量内容若有空格符可以使用双引号或单引号将变量内容结合起来
    -- 双引号内的特殊字符如$等,可以保有原本的特性,如下:
    a="lang is $LANG"echo $a 可以得到 lang is zh_TW.UTF-8
    -- 单引号内的特殊字符仅为一般字符(纯文本),如下:
    a=’lang is $LANG‘echo $a 可以得到 lang is $LANG
  • 可以用跳脱字符" \ "将特殊符号变成一般字符
    name=panda\ pandaecho $name 可以得到panda panda
  • 在一串指令的执行中,还需要借由其他额外的指令所提供的信息时,可以使用“反单引号” `指令`$(指令)
    (注意:是键盘上方的数字键1左边那个键)举例:
    version=$(uname -r) :设定 version 变量为uname -r这个指令
    echo $version :在指令行3.10.0-229.e17.x86_64
  • 若该变量为扩增变量内容时,则可使用如下方式累加内容
    例如:PATH="$PATH":/home/binPATH=${PATH}:home/bin
  • 若该变量需要在其他子程序执行,则需要以export来使变量变成环境变量:
    export PATH
  • 通常大写字符为系统默认变量,自行设定变量可以使用小写字符,方便判断
  • 取消变量的方法为使用unset:「unset 变量名称」
    例如,取消 myname 的设定 unset myname

练习~


相关文章

网友评论

      本文标题:Linux 之 Bash -- shell 的变量功能(一)

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