zoukankan      html  css  js  c++  java
  • 变量和引用

    变量可分为:本地变量、环境变量和位置变量。


    本地变量是仅能够在用户当前shell生命期的脚本中使用的变量,类似于编程语言中的局部变量。
    环境变量则适用域全部由登录进程创建产生的子进程。
    位置变量也属于变量,它用于向shell脚本传递參数,是仅仅读的。

    1.变量的赋值

    [root@iZ2546h6zurZ test]# a=12
    [root@iZ2546h6zurZ test]# echo $a
    12
    
    
    [root@iZ2546h6zurZ test]# unset a
    [root@iZ2546h6zurZ test]# 
    [root@iZ2546h6zurZ test]# 
    [root@iZ2546h6zurZ test]# echo $a

    去除某个变量用unset

    [root@iZ2546h6zurZ test]# color=black
    [root@iZ2546h6zurZ test]# 
    [root@iZ2546h6zurZ test]# echo "the color is ${color:=blue}"
    the color is black
    [root@iZ2546h6zurZ test]# echo "the color is ${color:-blue}"
    the color is black
    

    当中:=对未赋值的变量将value值赋值给它;
    :-对未赋值的变量将value值赋给它,可是value不存储到变量相应的地址空间。



    清除color变量后測试

    [root@iZ2546h6zurZ test]# unset color
    [root@iZ2546h6zurZ test]# 
    [root@iZ2546h6zurZ test]# 
    [root@iZ2546h6zurZ test]# echo "the color is ${color:=blue}"
    the color is blue
    [root@iZ2546h6zurZ test]# echo "the color is ${color:-blue}"
    the color is blue

    2.设置变量为仅仅读

    [root@iZ2546h6zurZ test]# readonly color
    [root@iZ2546h6zurZ test]# color=black
    -bash: color: readonly variable
    或者
    [root@iZ2546h6zurZ test]# declare -r color


    shell脚本变量是无类型的。并且shell变量同一时候有数值类型和字符类型两种赋值。数值类型初值是0,字符类型初值是空,并且能够不预先定义变量而直接使用。



    3.环境变量

    创建环境变量

    [root@iZ2546h6zurZ test]# APPSPATH=/usr/local
    [root@iZ2546h6zurZ test]# 
    [root@iZ2546h6zurZ test]# export APPSPATH
    [root@iZ2546h6zurZ test]# echo $APPSPATH
    /usr/local

    列出系统中全部的环境变量
    [root@iZ2546h6zurZ test]# env
    LC_PAPER=zh_CN.UTF-8
    LC_ADDRESS=zh_CN.UTF-8
    HOSTNAME=iZ2546h6zurZ
    LC_MONETARY=zh_CN.UTF-8
    TERM=xterm
    SHELL=/bin/bash
    HISTSIZE=1000

    重要的环境变量

    HOME 当前用户的主文件夹。
    IFS 内部域分隔符。
    PATH可运行文件的搜索路径,避免每次都要写全路径或者相对路径。

    默认多个可运行文件路径以冒号分隔
    USER和UID表示当前登录用户和登录用户的uid的环境变量
    PWD代表当前工作文件夹。改变文件夹后系统会自己主动更新该环境变量
    OLDPWD代表之前的工作文件夹
    PPID
    表示当前进程的父进程号
    ps1和ps2分别表示一级提示符和二级提示符,能够通过设置改环境变量来改变命令提示符

    环境变量的配置文件

    系统级:
    (1)/etc/profile:该文件是用户登录时,操作系统定制用户环境时使用的第一个文件。应用于登录到系统的每个用户。

    该文件通常是调用/etc/bash.bashrc文件。
    /etc/bash.bashrc:系统级的bashrc文件。


    (2)/etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量。

    用户级(这些文件处于家文件夹下):
    (1)~/.profile:每一个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件只运行一次!默认情况下,他设置一些环境变量,运行用户的.bashrc文件。这里是推荐放置个人设置的地方
    (2)~/.bashrc:该文件包括专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。

    不推荐放到这儿,由于每开一个shell,这个文件会读取一次。效率肯定有影响。


    ~/.bash_profile or ~./bash_login
    ~/.pam_environment:用户级的设置环境变量文件。

    4.父进程和子进程中本地变量和环境变量的訪问

    创建father.sh和child.sh

    father.sh

    #!/bin/bash
    
    
    #输出父进程号
    echo "father process id is $$"
    
    
    #定义本地变量
    localvar="define local var"
    echo "localvar=$localvar"
    
    
    #定义环境变量并输出
    ENVVAR="define env var"
    export ENVVAR
    echo "ENVVAR=ENVVAR"
    
    
    #调用child.sh脚本创建子进程
    $PWD/child.sh
    
    
    #child.sh 运行完成后输出相关变量值
    
    
    echo "return father process id is $$"
    
    
    echo "localvar=$localvar"
    
    
    echo "ENVVAR=ENVVAR"
    

    child.sh文件
    #!/bin/bash
    #输出自身的进程号和父进程号
    
    
    echo "child process id is $$"
    echo "my father process id is $PPID"
    
    
    #输出本地变量和环境变量的值
    echo "localvar=$localvar"
    echo "ENVVAR=$ENVVAR"
    
    
    #又一次定义本地变量和环境变量
    localvar="redifine localvar"
    ENVVAR="redifine envvar"
    
    echo "localvar=$localvar"
    
    
    ENVVAR="redifine envvar"

     赋运行权限
    [root@iZ2546h6zurZ test]# chmod u+x father.sh
    [root@iZ2546h6zurZ test]# chmod u+x child.sh 

    运行结果

    [root@iZ2546h6zurZ test]# ./father.sh 
    father process id is 26566
    localvar=define local var
    ENVVAR=ENVVAR
    child process id is 26567
    my father process id is 26566
    localvar=
    ENVVAR=define env var
    localvar=redifine localvar
    return father process id is 26566
    localvar=define local var
    ENVVAR=ENVVAR

    说明不管是本地变量还是环境变量。都无法向其父进程传递。

    5.位置參数
    所谓的位置參数便是0,1,2,3,4,5,6,7,8,9...。使用时,用$0,$1,$2...。 
    位置參数是当 script被加载时,后面所附加的參数。$0是本身。$1则为第一个參数,$2为第二个。依此类推。


    位置參数用来从命令行向shell传递參数。

    几个特殊的位置參数

    $0表示脚本的名字;

    $1表示第一个參数。$2表示第二个參数,以此类推,当数字大于等于10的时候须要用大括号括起来,如${10}。${100}。

    $@和$*同样,都表示从$1開始的全部的參数的值。中间用空格隔开。

    $#表示执行程序的时候传入的參数的数目。

    $?表示程序的退出状态,0表示没有错误,非0表示有错误。



    $$表示执行此脚本程序的进程号。

    6.引用

    “” 双引號 引用除美元符号($)、反引號(`)和反斜杠()之外的全部字符
    ‘’ 单引號 引用全部字符
    `` 反引號 Shell将反引號的内容解释为系统命令
    反斜杠 转义符,屏蔽下一个字符的特殊含义

    7.命令替换

    两种方式:
    1)使用反引號
    ``
    2)使用$()

  • 相关阅读:
    快速幂模板
    部分有关素数的题
    POJ 3624 Charm Bracelet (01背包)
    51Nod 1085 背包问题 (01背包)
    POJ 1789 Truck History (Kruskal 最小生成树)
    HDU 1996 汉诺塔VI
    HDU 2511 汉诺塔X
    HDU 2175 汉诺塔IX (递推)
    HDU 2077 汉诺塔IV (递推)
    HDU 2064 汉诺塔III (递推)
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5221791.html
Copyright © 2011-2022 走看看