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)使用$()

  • 相关阅读:
    常用的十种排序
    [CSP-S模拟测试]:Weed(线段树)
    [CSP-S模拟测试]:Blue(贪心)
    $LaTeX$数学公式大全13
    $LaTeX$数学公式大全12
    $LaTeX$数学公式大全11
    $LaTeX$数学公式大全10
    $LaTeX$数学公式大全9
    $LaTeX$数学公式大全8
    [CSP-S模拟测试]:石头剪刀布(rps)(概率DP)
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5221791.html
Copyright © 2011-2022 走看看