环境变量的功能

本文介绍了Linux环境变量的查看方法,如env和set,重点解析了$、?、OSTYPE等特殊变量的含义。此外,讨论了环境变量与自定义变量的区别,以及export如何将变量变为环境变量。还探讨了语系变量对显示的影响,子进程继承环境变量的原理,以及通过read和declare声明变量和数组。最后,文章提及了ulimit在限制系统资源方面的作用,如限制文件大小、CPU时间和内存总量。
  1. 用env查看环境变量与常见环境变量说明
    变量名含义
    HOSTNAME主机名
    TERM终端机使用的环境类型
    SHELL这个环境下使用的shell程序
    HISTSIZE命令的条数
    USER用户名称
    MAIL用户取用的mailbox位置
    PATH执行文件命令查找路径
    INPUTRC与键盘按键功能有关,可以设置特殊按键
    PWD目前用户所在工作目录
    LANG与语系有关
    HOME用户的主文件夹
    _上次使用的命令的最后一个参数
  2. 用set查看所有变量
    变量含义
    BASHbash的主程序放置的路径
    BASH_VERSIONbash的版本
    COLORS颜色记录的文件
    COLUMNS使用的字段有几个字符长度
    HISTFILE历史命令记录的放置文件,隐藏文件
    OLDPWD上一个工作目录
    OSTYPE操作系统类型
  3. PS1提示符的设置
    符号意义
    \d可以显示出星期月日的日期格式,如"Mon Feb 2"
    \H完整的主机名字
    \h仅取主机名在第一的小数点之前的名字
    \t显示时间,为24小时格式"HH:MM:SS"
    \T显示时间,为12小时格式"HH:MM:SS"
    \A显示时间,为24小时格式"HH:MM"
    @显示时间,为12小时格式的"am/pm"
    \u目前账号名称如root
    \vBASH版本信息
    \w完整的工作目录名称,由根目录写起的目录名称
    \W利用basename函数取得工作目录名称
    #执行的第几个命令
    $提示符,如果是root则为#,否则为$
    [root@www ~]# cd /home
    [root@www home]# PS1='[\u@\h\w\A#\\#]\$'
    [root@www /home 17:02 #85]#
    
  4. $代表关于本shell的PID
    $本身是一个变量,代表的是目前Shell这个线程代号,就是PID,如果想直到shell的PID,直接在命令行输入 “echo $$”,出现的数字就是PID号码
  5. ?代表关于上个命令的回传码
    问号也是一个特殊变量。当我们执行某些命令时,这些命令都会回传一个执行后的代码,一般来说,如果成功执行该命令,则会回传一个0,如果执行错误,就会回传"错误代码",一般已非0值替代。
  6. OSTYPE,HOSTTYPE,MACHTYPE代表主机硬件与内核等级
    CPU主要分为32位和64位,其中32位中又可分为i386,i586,i686,而64位则称为x86_64。由于不同等级的CPU的命令集不同,因此软件可能会针对某些CPU进行优化。
  7. export自定义变量转换为环境变量
    环境变量和自定义变量的区别就是这个变量是否会被子进程继续引用。子进程只会继承父进程的环境变量,子进程不会继承父进程的自定义变量。
    export 变量名称
    
  8. 影响显示结果的语系变量locate
    当使用man command的方式去查询某个数据说明文件时,该说明文件的内容可能会因为我们使用的语系不同而产生乱码。另外利用ls查询文件的时间时,也有可能会有乱码出现在时间部分。
    locate -a        #这个命令用来查询Linux里面有多少个语系
    
  9. 变量有效范围
    Q:为什么环境变量的数据可以被子进程所引用
    A:当启动一个shell,操作系统会分配一个记忆块给shell使用,此内存内的变量可让子进程取用。若在父进程利用export功能,可以让自定义变量内容写到上述的记忆块中,当加载另一个shell时,子shell可以将父shell的环境变量所在的记忆块导入自己的环境变量块中。
  10. 变量键盘读取、数组与声明:read,array,declare
    • read。要读取来自键盘输入的变量,就是用read命令。

      read [-pt] variable_name
      
      参数含义
      -p后面可以接提示符
      -t后面可以接等待的"秒数",不会一直等待用户输入
      [root@www ~]#read atest
      This is a test      <==此时光标会等待输入
      [root@www ~]#echo $atest
      This is a test
      
      [root@www ~]#read -p "Please keyin your name: " -t 30 name
      Please keyin your name: Edmond           <==出现了提示符
      [root@www ~]#echo $name
      Edmond
      

      read之后不加任何参数,直接加上变量名字,就会直接出现一个空白行等待输入。如果加上-t秒数,那么30秒内没有任何操作,命令就会自动略过,如果加上-p参数,那么输入光标前面会出现提示符。

    • declare/typeset。声明变量类型

      参数含义
      -a将后面变量名的变量定义为数组
      -i将后面变量名的变量定义为整数数字类型
      -x用法与export一样,将后面的变量名变成环境变量
      -r将变量设置为readonly类型,给变量不可被更改内容,也不能重设
      [root@www~]#sum=100+300+50
      [root@www~]#echo $sum
      100+300=50     <=====因为是文字类型,所以直接显示了
      [root@www~]declare -i sum=100+300+50
      [root@www~]echo $sum
      450                  <=====显示结果
      [root@www~]#declare -x sum             <======将sum变成环境变量
      [root@www~]#export | grep sum
      declare -ix sum="450"
      [root@www~]#declare -r sum             <======将sum变成只读属性
      [root@www~]#sum=tesgting
      -bash:sum:readonly variable              <======这个变量不能改变
      [root@www~]#declare +x sum           <======将-号变成+可以进行取消操作
      [root@www~]#declare -p sum           <======可以单独列出变量类型
      declare -ir sum="450"
      
      • 数组类型array
        数组的设置方式var[index]=content,意思是有一个数组名为var,而这个数组的内容为var[1]=“small min”,var[2]=“big min”,var[3]=“nice min”。
        数组类型的读取建议直接使用${数组}的方式来读取
  11. 与文件系统及程序的限制关系:ulimit
    bash可以限制用户某些系统资源的,包括打开的文件数量,可以使用的CPU时间,可以使用的内存总量。
    参数含义
    -H严格设置,必定不能超过这个设置的数值
    -S警告设置,可以超过这个设置的值,但是若超过则有警告信息,通常-S设置的值比-H的小
    -a后面不接任何参数
    -c当某进程发生错误时,系统可能将该进程在内存中的信息写入文件
    -f此shell可以创建的最大文件容量,单位为KB
    -d进程可以使用的最大断裂内存容量
    -l可以用于锁定lock的内存量
    -t可以使用的最大CPU时间,单位为秒
    -u单一用户可以使用的最大进程数量
    [root@www~]#ulimit -a        <=========列出目前身份的所有限制数值
    core file size                 (blocks,-c)  0                  <==只要是0就代表没有限制
    data seg size                (kbytes,-d)     unlimited
    scheduling priority        (-e)          0
    file size                         (blocks,-f)     unlimited      <==可以创建的单一文件的大小
    open files                      (-n)               <==同时可以打开的文件数量
    
    一般用户如果以ulimit设置了-f文件大小,那么他只能减少文件容量,不能增加文件容量。
  12. 变量内容的删除、替代与替换
    • 变量内容的删除
      ${variable#/*kerberos/bin:}
      variable是变量名称
      #代表从变量内容最前面开始向右删除,且仅删除最短的那个,
      /*kerberos/bin: 代表要被删除的部分,由于#代表由前面开始删除,所以删除的路径从/开始写。
      如果把上面的#替换为##那么就是从前面删除匹配的最长的内容。
      那么如果想从后面开始删除,就把#替换为%号。
    • 变量内容的替换
      ${path/sbin/SBIN}
      两个斜线之间的是需要替换的字符,两个最后那个字符是需要被替换的字符,但是只会替换第一个符合的内容
      ${path//sbin/SBIN}
      如果是两个斜线,就会变成符合的内容都会被替代
      变量设置方式说明
      ${变量#关键字}若变量内容从头开始的数据符合"关键字",则将符合的最短数据删除
      ${变量##关键字}若变量内容从头开始的数据符合"关键字",则将符合的最长数据删除
      ${变量%关键字}若变量内容从尾开始的数据符合"关键字",则将符合的最短数据删除
      ${变量%%关键字}若变量内容从尾开始的数据符合"关键字",则将符合的最长数据删除
      ${变量/旧字符串/新字符串}若将变量内容符合"旧字符串",则第一个旧字符串会被新字符串替换
      ${变量//旧字符串/新字符串}若将变量内容符合"旧字符串",则所有旧字符串会被新字符串替换
    • 变量测试与内容替换
      当我们需要判断某一个变量是否存在,如果存在就使用既有的设置,如果不存在就给予一个常用的设置。
      [root@www~]#username=${username-root}
      [root@www~]#echo $username
      root                 <==username因为uername没有设置,所以主动给给予名为root的内容
      [root@www~]#username="an apple"
      [root@www~]#echo ${username-root}
      an apple         <==因为username已经被设置了,所以不能被设置为root
      
      但是上面的操作有一个问题,如果username里面的值是空字符串,比如username="",那么echo ${username-root}是没有办法给username设置内容的。
      [root@www~]#username=""
      [root@www~]#username=${username:-root}
      [root@www~]#echo username
      root
      
      在大括号内加上冒号后,被测试变量未被设置或是一已被设置为空字符串,都能使用后面的内容来替换与设置。
      变量设置方式str没有设置str为空字符串str已设置非为空字符串
      var=${str-expr}var=exprvar=""var=$str
      var=${str:-expr}var=exprvar=exprvar=$str
      var=${str+expr]var=var=exprvar=expr
      var=${str:+expr}var=var=var=expr
      var=${str=expr}str=expr var=exprstr="" var=""str不变 var=$str
      var=${str:=expr}var=expr str=exprstr=expr var=exprstr不变 expr=str
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值