当前位置: 首页 > news >正文

shell之变量和引用

2019独角兽企业重金招聘Python工程师标准>>> hot3.png


一 变量

     变量:本质上是程序中保存用户数据的一块内存空间,变量名就是内存空间地址。

    Shell中:变量可有字母数字和下划线组成,只能以字母或下划线开头。

    命名:PATH=/sbin

         JAVA_HOME=”/usr/lib”

    (变量名区分大小写)

    在shell中,变量的数据类型无需显示低声明,变量的数据类型会根据不同操作有所变化。

    (shell变量部分数据类型,统一按字符串存储,但根据变量的上下文环境,允许程序执行一些不同操作)。为了能执行加减法计算,shell为自动进行数据类型的转换,如果遇到含义非数字的字符串,则该字符串被转换成整数0。同时,在空串以及没有定义变量的情况下,变量值都会被转换为整数0。

    例如,n=“” echo “n=$n”

         Echo “p=$p”

1.1变量的定义:

    Shell中可以直接使用变量,无需定义,如果变量的值包含空格,一定要用引号引起来。

    declare attribute variable(控制变量相关属性)

    attribute 表示变量属性,variable表示名称,属性有:

    -p:显示所有变量值

    -i:定义为整数

    -r:定义为只读变量

    -a:定义为数组变量

    -f:显示所有自定义函数,包括名称和函数体

    -x:变量设置成环境变量,随后的脚本和程序可以使用

    例子:

    x=6/3

    echo "$x"                            //6/3

    #定义变量x为整数

    declare -i x

    echo "$x"                          //6/3,因为shell中所有数据都当做字符串存储

    #将算术式赋给变量x

    x=6/3

    echo "$x"                         //2,变量声明为整数后,可以进行算术运算

    #将字符串赋给变量x

    x=hello

    echo "$x"

    #将浮点数赋给变量x

    x=3.14

    echo "$x"                          //报错,bash不支持浮点数

    #取消变量x的整数属性

    declare +i x

    #重新将算术式赋给变量x

    x=6/3

    echo "$x"

    #求表达式的值

    x=$[6/3]

    echo "$x"                              //2,得到算术值得两种方法,方括号

    #求表达式的值

    x=$((6/3))                             //2,得到算术值得两种方法,圆括号

 1.2 引号

    单引号(‘’):括起来的字符作为普通字符

    双引号(“”):括起来的字符,除    “$”, “\”,  “`”和“``”保留其特殊功能外,其余仍作为普通字符

    反引号(``):括起来的字串被解释为命令,shell首先执行该命令,并一他的标准输出结果例如:取代整个反引号部分

    #! /bin/bash

    #输出当前目录

    echo "current directory is `pwd`"

    结果:currentdirectory is /root/chapter3

    (先执行`pwd`,结果/root/chapter3取代`pwd`)

 1.3 变量的作用域:

    全局变量:shell中,全局变量可在脚本中定义,也可在某个函数中定义。脚本中定义的变量都为全局变量,作用域为被定义的地方开始,指定shell脚本结束或显示删除。

    例:

    #! /bin/bash

    #定义函数

    func()

    {

       #输出变量x的值

      echo "$v1" //100

       #修改变量x的值

      v1=200

    }

    #在脚本中定义变量x

    v1=100

    #调用函数

    func

    #输出变量x的值

    echo "$v1"  //200

    局部变量:通常仅限某个程序段访问,如函数内部。Shell中可在函数内部通过local关键字定义局部变量,另外函数的参数也是局部变量。

    例:

    #! /bin/bash

    #定义函数

    func()

    {

       #使用local关键字定义局部变量

      local v2=200

    }

    #调用函数

    func

    #输出变量的值

    echo "$v2"    // 空值,函数外面不能获得该变量的值

    注意:全局变量与局部变量同名时,函数内部的局部变量优先被使用。无论在何处,赋值语句都会影响全局变量的值,全局变量的值改变后,最整个脚本都有效,默认情况下,函数内部定义的变量也是全局变量,除非用local声明

 
1.4 系统变量:

    Shell的系统变量主要对参数判断和命令返回值判断时的使用,包括脚本和函数的参数,以及脚本和函数的返回值。常用系统变量:

    $n:表示传递给脚本的第n个参数,如$1表示第一个参数

    $#:命令行参数的个数

    $0:当前脚本名称

    $*:以“参数1参数2….”形式返回所有参数的值

    $@:以“参数1”“参数2”形式返回所有参数的值

    $_:保存之前执行的命令的最后一个参数

    例子:

    #! /bin/bash

    #输出脚本的参数个数

    echo "thenumber of parameters is $#"

    #输出上一个命令的退出状态码

    echo "thereturn code of last command is $?"

    #输出当前脚本名称

    echo "thescript name is $0"

    #输出所有的参数

    echo "theparameters are $*"

    #输出其中的几个参数

    echo"\$1=$1;\$2=$2;\$11=$11"

1.5 环境变量:

    Shell环境变量是所有shell程序都可以使用的变量。(全部大写)

    PATH:命令搜索路径,以冒号为分隔符,当前目录不在系统路径里

    HOME:用户主目录的路径名,cd命令的默认参数

    COLUMNS:命令编辑模式下可使用命令行长度

    HISTSIZE:命令历史文件中最多可包含的命令条数

    HISTFILE:命令历史文件

    HISTFILESIZE:命令历史文件中包含的最大行数

    IFS:shell使用的分隔符

    LOGNAME:当前的登入名

    SHELL:Shell的全路径名

    TERM:终端类型

    TMOUT:shell自动退出时间,单位秒,为0则禁止shell自动退出

    PWD:当前工作目录

    可以使用set命令列出所有环节变量,set| more

    例子:

    #! /bin/bash

    #输出命令搜索路径

    echo"commands path is $PATH"

    #输出当前的登录名

    echo "currentlogin name is $LOGNAME"

    #输出当前用户的主目录

    echo "currentuser's home is $HOME"

    #输出当前的Shell

    echo "currentshell is $SHELL"

    #输出当前工作目录

    echo "currentpath is $PWD"

 1.6 变量赋值和清空:

    Shell中所有普通变量值都看作字符串,如果赋值包含空格,制表符和换行符,要用单引号或双引号括起来,一个没有初始化的shell变量被认为是一个空字符串。

 1.7 清除变量:

    变量被清除后,代表的值也会消失。消除变量用unset语句

    unsetvariable_name

二 引用
2.1引用变量的值:

    可通过在变量面前加$来获取变量的值。

    为了能使shell正确的界定变量名,可以在引用变量时使用大括号将变量括起来

    如:

    v4=123

    echo “${v4}abc”

    结果:123abc

    (若直接echo “$v4abc”,会变成空字符串,因为v4abc没有被定义)

2.2引用和替换:

    引用:字符串用引用符合包括起来,防止特殊字符被shell解释成其他含义

    常用引用符号:

    双引号:除$,’’,``,\之外,其他所有字符保持字面意义

    单引号:所有字符保持字面意义

    反引号:反引号中的字符串被解释为shell命令

    反斜线:转义字符,屏蔽后的字符的特殊意义

2.3全引用:

    单引号引用的方式。

    #! /bin/bash

    #定义变量v1

    v1="chunxiao"

    #输出含有变量名的字符串

    echo 'Hello, $v1'  //全引用保持字面意义

    结果:Hello ,$v1

 2.4 部分引用:

    双引号引用方式

 2.5 命令替换:

    将某个shell命令的执行结果赋给某个变量。

    两种方式:

    反引号:`shell_command`

    圆括号:$(shell_command)

2.6转义:

    转换某些特殊字符的意义,\表示。屏蔽反斜线后面字符的特殊意义

    如:

    Echo $SHELL

    结果:/bin/bash

    Echo \$SHELL

    结果:$SHELL

 

转载于:https://my.oschina.net/u/1186749/blog/805473

相关文章:

  • GIT教程
  • ios UIApplocation 中APP启动方式
  • 推送知识点2
  • 各种数据库连接字符串
  • Java程序,JDK的安装、环境的配置
  • 写一个简易的shell脚本(二)
  • css中import与link用法区别
  • 避免死锁
  • ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
  • Linux下如何修改Apache根目录
  • Linux at 定时任务
  • 墨香带你学Launcher之(七)--小部件的加载、添加以及大小调节
  • 命令行工具
  • 远程过程调用协议(RPC)
  • Linux命令-自动挂载文件/etc/fstab功能详解[转]
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 2019.2.20 c++ 知识梳理
  • Akka系列(七):Actor持久化之Akka persistence
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Angular 响应式表单之下拉框
  • Angular4 模板式表单用法以及验证
  • cookie和session
  • DOM的那些事
  • github指令
  • HTTP--网络协议分层,http历史(二)
  • JavaScript设计模式系列一:工厂模式
  • leetcode讲解--894. All Possible Full Binary Trees
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • php面试题 汇集2
  • Shadow DOM 内部构造及如何构建独立组件
  • XML已死 ?
  • 测试如何在敏捷团队中工作?
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 技术胖1-4季视频复习— (看视频笔记)
  • 解析带emoji和链接的聊天系统消息
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 一道闭包题引发的思考
  • 字符串匹配基础上
  • 1.Ext JS 建立web开发工程
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • #控制台大学课堂点名问题_课堂随机点名
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (175)FPGA门控时钟技术
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (转)socket Aio demo
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .Net Core 中间件验签
  • .NET 中创建支持集合初始化器的类型
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?