zoukankan      html  css  js  c++  java
  • linux系统中变量和环境变量

    变量定义的基本规则:

    1.变量名和变量内容以一个“=”来连接

      如 myname=zhangsan

    2.等号两边不能直接接空格,如下为错误的

    myname = zhangsan 或者 myname=zhang san

    3.变量名可以为字母或数字,但不能以数字开头,如下是错误的

    2myname=zhangsan

    4.变量内容有空格可以使用“”双引号或者‘’单引号将变量内容结合起来,但

    双引号内的特殊字符如$等,可以保留原有特性

    单引号内的特殊字符仅为一般内容,纯文本

      如[root@www ~]# name=VBird

       [root@www ~]# echo $name VBird

       [root@www ~]# myname="$name its me"

       [root@www ~]# echo $myname

       [root@www ~]# VBird its me(双引号显示结果,$name仍作为变量使用)

       [root@www ~]# myname='$name its me'

       [root@www ~]# echo $myname

    [root@www ~]# name its me(单引号显示结果,$name 没有被替换,仅作为一般字符输出)

    5.可用跳脱字符‘\’,将特殊字符如$,\,空格等跳脱为一般字符

    6.在一串指令中,还需要籍由其他指令提供的信息,则可以用反单引号【`指令`】或者【$(指令)】,反单引号是键盘上数字1左边的键,不是单引号

      如要取得核心的版本需要如下指令:

    [root@localhost yaotameng]# echo `uname -r`
    2.6.32-279.el6.x86_64
    [root@localhost yaotameng]#
    [root@localhost yaotameng]# echo $(uname -r)
    2.6.32-279.el6.x86_64

    uname -r是系统指令显示核心版本

    7.若变量为扩展变量,如需要添加PATH一般都扩展变量,需要使用"$变量名"或${变量}累加内容,如下所示

      PATH=“$PATH”:/home/bin

    8.若变量需要在子程序执行,则需要以export来是变量成为环境变量

    export PAHT

    9.通常大写字符为系统默认变量

    10.取消变量设置的方法为unset

      如 unset myname

    查看系统中变量的命令 env(environment),set,export

    env观察环境变量

    set观察所有变量(环境变量和自定义变量)

    export: 自定义发量转成环境发量

    set中PS1说明:

    o \d :代表日期,格式为 Weekday Month Date,例如 "Mon Aug 1"

    o \H :完整的主机名称。举例来说,鸟哥的练习机 linux.dmtsai.tw ,那么这个主机名称就是 linux.dmtsai.tw www.2cto.com

    o \h :仅取主机名称的第一个名字。以上述来讲,就是 linux 而已, .dmtsai.tw 被省略。

    o \t :显示时间,为 24 小时格式,如: HH:MM:SS

    o \T :显示时间,12 小时的时间格式!

    o \A :显示时间,24 小时格式, HH:MM

    o \u :目前使用者的账号名称;

    o \v :BASH 的版本信息;

    o \w :完整的工作目录名称。家目录会以 ~ 取代;

    o \W :利用 basename 取得工作目录名称,所以仅会列出最后一个目录名。

    o \# :下达的第几个指令。

    o \$ :提示字符,如果是 root 时,提示字符为 #

    [root@localhost yaotameng]#

    [root@localhost yaotameng]#PS1='[\u@\h \W \A #\#]\$'

    [root@localhost yaotameng 00:28 #77]#


    特殊变量 $和?

    $: 钱字号本身也是个变量,这个变量代表的是目前这个shell的线程代号,亦即是所谓的PID(process ID)。
    想要知道我们的shell PID,就可以用【echo $$】即可,出现的数字就是PID 号码

    [root@localhost yaotameng 00:30 #79]#echo $$
    1224
    ?: 问号也是一个特殊的变量,在bash里这个变量很重要,这个变量是上一个执行的指令所回传的值,当我们
    执行某些指令时,这些指令都会回传一个执行后的代码,一般来说如果成功的执行改指令,则会回传一个
    0值,如果执行发生错误,就会回传错误代码,一般就是以非0的数值来取代

    [root@localhost yaotameng 00:36 #80]#echo $SHELL
    /bin/bash
    [root@localhost yaotameng 00:40 #81]#echo $?
    0
    [root@localhost yaotameng 00:41 #82]#2name=zhangdan
    -bash: 2name=zhangdan: command not found
    [root@localhost yaotameng 00:41 #83]#echo $?
    127
    [root@localhost yaotameng 00:41 #84]#


    从键盘读取变量read

    read [-pt]variable

    -p :后面可直接接提示字符
    -t :后面可以接等待的秒数,这个比较有趣,不会一直等待使用者

    [root@localhost yaotameng 00:57 #92]#read -p "please input your name:" myname
    please input your name:zhanger
    [root@localhost yaotameng 00:58 #93]#echo $myname
    zhanger
    [root@localhost yaotameng 00:58 #94]#
    [root@localhost yaotameng 00:58 #94]#
    [root@localhost yaotameng 00:58 #94]#read -p "please input your name:" -t 10 myname
    please input your name:
    [root@localhost yaotameng 00:58 #95]#

    declare/typeset定义不同类型的变量

    [root@localhost yaotameng]#declare [-aixr] variable

    -a :将后面的名称为variable的变量定义为数组(array)类型
    -i :将后面的名称为variable的变量定义为整数数字
    -x : 用法与export一样,就是将后面的variable变成环境变量
    -r :将变量设定成为readonly类型,该变量不可更改内容,也不可unset


    [root@localhost yaotameng 01:04 #97]#sum=50+100+200 (由于未定义类型,默认为字符串)
    [root@localhost yaotameng 01:04 #98]#echo $sum
    50+100+200
    [root@localhost yaotameng 01:05 #100]#declare -i sum=50+100+200 (定义为整形)
    [root@localhost yaotameng 01:05 #101]#echo $sum
    350

    bash环境中的运算,预设最多只能达到整数形态,所以1/3=0


    将sum变成环境变量

    [root@localhost yaotameng 01:05 #102]#declare -x sum
    [root@localhost yaotameng 01:08 #103]#export | grep sum
    declare -ix sum="350"
    [root@localhost yaotameng 01:09 #104]#declare -p sum(单独列出变量的类型)
    declare -ix sum="350"

    取消环境变量

    [root@localhost yaotameng 01:10 #105]#declare +x sum (-变成+变成取消动作)
    [root@localhost yaotameng 01:10 #106]#
    [root@localhost yaotameng 01:10 #106]#declare -p sum
    declare -i sum="350"

    数组类型的变量


    [root@localhost yaotameng 01:11 #108]#var[1]="small one"
    [root@localhost yaotameng 01:18 #109]#var[2]="samll two"
    [root@localhost yaotameng 01:18 #110]#echo ${var[1]},${var[2]}
    small one,samll two



    变量内容 删除和替换(#,##,%,%%,/**/,//**/)

    [root@localhost ~]#echo $path

    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    [root@localhost ~]#
    [root@localhost ~]# echo ${path#/*/bin:}   (从前开始删除/bin之前的内容,#表示符合需求的最短长度)
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

    [root@localhost ~]# echo $path
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    [root@localhost ~]#
    [root@localhost ~]#
    [root@localhost ~]# echo ${path##/*/}(从前开始删除/之前的所有内容,符合长度的最长长度)
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

    %

    [root@localhost ~]# echo $path
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

    [root@localhost ~]# echo ${path%bin*bin}
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin(从后删除bin到bin之间的内容,符合长度的最短长度)

    %%

    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    [root@localhost ~]#
    [root@localhost ~]#
    [root@localhost ~]# echo ${path%%bin*bin}
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin(从后删除bin到bin的最长长度)

    替换//

    [root@localhost ~]# echo $path
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    [root@localhost ~]#
    [root@localhost ~]#
    [root@localhost ~]#
    [root@localhost ~]# echo ${path/sbin/SBIN}
    /usr/local/SBIN:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin(第一个字符会替换掉)
    [root@localhost ~]#
    [root@localhost ~]# echo ${path//sbin/SBIN}
    /usr/local/SBIN:/usr/local/bin:/SBIN:/bin:/usr/SBIN:/usr/bin:/root/bin(所有字符都会替换掉)

  • 相关阅读:
    [斜率优化][DP]luogu P3648 序列分割
    [状压DP]luogu P1879 玉米田
    [最短路][期望DP]luogu P1850 换教室
    [DP]JZOJ 3046 游戏
    [组合数学]JZOJ 3013 填充棋盘
    [贪心]JZOJ 3012 购买
    [最大流][二分]JZOJ 1259 牛棚
    [数学][构造]JZOJ 3317 管道
    Cookie和Session
    XSS和CSRF的理解
  • 原文地址:https://www.cnblogs.com/lu215225/p/3006768.html
Copyright © 2011-2022 走看看