zoukankan      html  css  js  c++  java
  • shell基础语法:变量,变量作用域,注释,shell配置文件

    参考

    https://www.runoob.com/linux/linux-shell-variable.html(shell变量)

    基本知识

    1,Shell是弱类型的语言,

    没有向C、java那样的强类型变量,都是弱类型变量。都会统一存储为字符串类型

    2,语法

    your_name="runoob.com"
    
    支持3种方式
    name=nick
    name='nick'
    mame="nick"

    3,格式

    变量名和等号之间不能有空格

    命名只能使用英文字母,数字和下划线

    4,变量使用

    使用一个定义过的变量,只要在变量名前面加美元符号即可

    your_name="qinjx"
    echo $your_name
    echo ${your_name}

    注意:变量名外面的{}是可选的,加不加都行,加{}是为了帮助解释器识别变量的边界

    已定义的变量,可以被重新定义

    your_name="tom"
    echo $your_name
    your_name="alibaba"  #这里不能加$,使用变量的时候才要加$
    echo $your_name

    5,只读变量

    #!/bin/bash
    myUrl="https://www.google.com"
    readonly myUrl
    myUrl="https://www.runoob.com"  #会报错

    6,删除变量

    注意:unset 命令不能删除只读变量, 

    删除只读变量待整理

    unset variable_name

    变量作用域

    参考:http://c.biancheng.net/view/773.html(C编程网:shell变量作用域)

    运行shell时,会同时存在三种变量:

    • 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
    • 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
    • 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

     局部变量

    在 Shell 函数中定义的变量默认也是全局变量,它和在函数外部定义变量拥有一样的效果。

    #!/bin/bash
    #定义函数
    function func(){
        a=99
    }
    #调用函数
    func
    #输出函数内部的变量
    echo $a  #输出99

    要想变量的作用域仅限于函数内部,可以在定义时加上local命令,此时该变量就成了局部变量

    #!/bin/bash
    #定义函数
    function func(){
        local a=99
    }
    #调用函数
    func
    #输出函数内部的变量
    echo $a  #为空

    全局变量

    所谓全局变量,就是指变量在当前的整个 Shell 进程中都有效。每个 Shell 进程都有自己的作用域,彼此之间互不影响。

    在 Shell 中定义的变量,默认就是全局变量。

    想要实际演示全局变量在不同 Shell 进程中的互不相关性,可在图形界面下同时打开两个 Shell,或使用两个终端远程连接到服务器

    环境变量

    1,全局变量只在当前 Shell 进程中有效,对其它 Shell 进程和子进程都无效。如果使用export命令将全局变量导出,那么它就在所有的子进程中也有效了,这称为“环境变量”

    2,环境变量被创建时所处的 Shell 进程称为父进程,如果在父进程中再创建一个新的进程来执行 Shell 命令,那么这个新的进程被称作 Shell 子进程。

    当 Shell 子进程产生时,它会继承父进程的环境变量为自己所用,所以说环境变量可从父进程传给子进程。不难理解,环境变量还可以传递给孙进程。环境变量只能向下传递而不能向上传递

    3,通过exit命令可以一层一层地退出 Shell。

    4,环境变量也是临时的

    通过 export 导出的环境变量只对当前 Shell 进程以及所有的子进程有效,如果最顶层的父进程被关闭了,那么环境变量也就随之消失了,其它的进程也就无法使用了,所以说环境变量也是临时的。
    如果想让一个变量在所有 Shell 进程中都有效,不管它们之间是否存在父子关系,
    只有将变量写入 Shell 配置文件中才能达到这个目的!Shell 进程每次启动时都会执行配置文件中的代码做一些初始化工作,如果将变量放在配置文件中,那么每次启动进程都会定义这个变量。

    shell配置文件

     参考:https://blog.csdn.net/xiao_dan_/article/details/107935972(CSDN:shell配置文件)

    全局配置类

    /etc/profile
    /etc/profile.d/*.sh
    /etc/bashrc

    个人配置类

    ~/.bash_profile
    ~/.bashrc

    profile 类

    profile 类为交互式登录的shell 提供配置,用于定义环境变量或运行命令和脚本

    bashrc类

    bashrc类为非交互式和交互式登录的shell 提供配置,用于定义命令别名和函数或定义本地变量

    配置文件生效

    1 重新启动shell 进程
    2 source | . 配置文件名

    执行顺序

    交互式登录

    直接通过终端输入账号密码登录
    使用 su - UserName 切换的用户

    非交互式登录

    su UserName
    图形界面下打开的终端
    执行脚本

    bash 退出任务

    保存在~/.bash_logout 文件中(用户),在退出登录shell 时运行。用于创建自动备份,清除临时文件

    注释

    注释符#

    #--------------------------------------------
    # 这是一个注释
    # author:菜鸟教程
    # site:www.runoob.com
    # slogan:学的不仅是技术,更是梦想!
    #--------------------------------------------

    多行注释

    :<<EOF
    注释内容...
    注释内容...
    注释内容...
    EOF
    
    #或者
    :<<'
    注释内容...
    注释内容...
    注释内容...
    '
  • 相关阅读:
    原生js写的flybird小游戏
    vue的图片上传
    移动端常用的meta标签,媒体查询以及一些样式设置《转载收藏》
    面向对象写的简单的colors rain
    canvas小球
    JS基础(常见操作函数和数组的方法)
    JS基础(instanceof详解)
    JS基础(垃圾回收)
    JS基础(arguments详解)
    JS基础(显性原型和隐性原型)
  • 原文地址:https://www.cnblogs.com/tkzc2013/p/15349667.html
Copyright © 2011-2022 走看看