shell学习笔记之二(变量)

    是一种弱类型的变量,声明时不需要指定其变量类型,也不需要遵循“先声明后使用”,任何时候只要想用就可以用。
    局部变量
      在某个shell中生效的变量,在其他shell中无效。可以使用local内建命令来“显示”的声明局部变量
    环境变量
       shell脚本中,默认是全局的
    预设的环境变量:
       BASH:说明bash的全路径
       BASH_VERSION
       CDPATH:用于快速进入目录
       EUID:记录当前用户的UID
       FUNCNAME :在用户函数体内部,记录当前函数体的函数名
       HISTCMD:记录下一条命令在history命令中的编号
       HISTFILE:记录history命令的记录文件的位置
       HISTFILESIZE
       HOSTNAME
       HOSTTYPE:主机架构
       MACHTYPE:主机类型的GNU标示
       LANG:语言环境
       PWD:记录当前目录
       OLDPWD:记录之前目录
       PATH
       PS1:
          命令提示符,默认是[\[email protected]\h \W]\$,其中\u是用户名,\h是主机名,\W是当前工作目录的basename,\$是用户UID的替换字符。
    定义和使用变量
        var=value
        注意:
            1、=两边没有空格 var = value(X)
            2、变量中有空格时必须要用””或’’引起来
        取值:${var}或者$var
        注意:
        1、如果变量值引用的是其他变量,则必须使用双引号。因为单引号会阻止shell解释特殊字符$。
        2、由于shell是弱变量特性,因此即使在脚本中没有定义变量也是可以引用的,从而使得错误很难找到。
        3、shell具有弱变量的特性,不需要声明就可以使用,可以设置变量必须先声明再使用
            shopt -s -o nounset
    取消变量
        unset var
    取消函数
        unset function
    特殊变量
        位置参数
            $1,...,$n  当n>10时,需要写成$(n)
            $0
            [email protected]/$*      脚本所有的参数
            $#     脚本参数总和

        脚本或命令返回值
            $?	上一个命令的返回值,要查看某个命令的返回值必须在运行中个命令后立即查看$?
            linux中规定正常的退出命令和脚本应该以0作为其返回值,任何非0的返回值都表示命令未正确退出或正常执行
            在自动化脚本中,也可以通过$?变量的值判断之前命令的执行状态,从而采取不同的动作
    数组
        shell变量是弱类型的,并不要数组的每一个元素都是相同的类型,shell中的数组对元素个数没有限制,但是只支持一维数组
        shell对于数组变量的声明非常宽松,随时都可以根据需要增加变量中的元素
        定义
            declare -a array
        初始化
            array[0]=0
            array[1]=1
            array[2]="hello"
              或
                declare -a array=(0 1 "hello")
                array[3]=‘waNG‘
              或
                array=(‘john‘ ‘sue‘)
              或
                array=([3]=3 [4]=4 [7]=4)
                    跳号赋值
        数组操作
            取值
                ${arrayname[index]}
                例:
                    1、echo ${array[0]} //取单个元素
                    2、echo ${array[@]} //取所有的元素值,得到的是以空格隔开的元素值
                    3、echo ${array[*]} //取所有的元素值,得到是一整个字符串
                    4、arr1=arr2     //这样相当于arr1=arr2[0]
            长度
                利用@或*可以将数组扩展成列表,然后使用#来获取数组元素的个数
                例:
                    1、echo ${#array[@]}
                    2、echo ${#array[*]}
                        通过本例也就知道了求字符串的长度,${#string}
            截取
                截取某个元素的一部分,对象可以是整个数组或某个元素
                例:
                    1、取出数组的第一,第二个元素
                        echo ${array[@]:1:2}
                    2、取出第二个元素从第0个开始连续5个字符
                        echo ${array[2]:0:5}
            连接
                conn=(${arr1} ${arr2})
            替换数组元素
                array=(${array[@]/old/new})
            取消数组或元素
                unset array[0]
                unset array
    只读变量
        readonly RO=100
        等效于:declare -r RO=100
    变量的作用域
        1、shell变量的作用域是在本shell内,属于本shell的全局变量,也就是从定义该变量的地方开始到shell结束,或者主动使用unset删除了该变量的地方为止。
        2、在函数题内使用local关键字声明了和全局变量同名的局部变量后,对该变量的操作只会影响局部变量,而不会影响与之同名的全局变量。
时间: 2024-10-18 05:23:52

shell学习笔记之二(变量)的相关文章

Django学习笔记(二)—— 模板

疯狂的暑假学习之 Django学习笔记(二)-- 模板 参考: <The Django Book> 第四章 一.模板基础知识 1.模板是如何工作的 用 python manage.py shell 启动交互界面(因为manage.py 保存了Django的配置,如果直接python启动交互界面运行下面代码会出错) 输入下面代码 >>> from django import template >>> t = template.Template('My name

现代C++学习笔记之二入门篇2,数据转换

static_cast:    这种强制转换只会在编译时检查. 如果编译器检测到您尝试强制转换完全不兼容的类型,则static_cast会返回错误. 您还可以使用它在基类指针和派生类指针之间强制转换,但是,编译器在无法分辨此类转换在运行时是否是安全的. dynamic_cast: dynamic_cast在运行时检查基类指针和派生类指针之间的强制转换. dynamic_cast 是比 static_cast 更安全的强制类型转换,但运行时检查会带来一些开销. const_cast:    con

Swift学习笔记十二:下标脚本(subscript)

下标脚本就是对一个东西通过索引,快速取值的一种语法,例如数组的a[0].这就是一个下标脚本.通过索引0来快速取值.在Swift中,我们可以对类(Class).结构体(structure)和枚举(enumeration)中自己定义下标脚本的语法 一.常规定义 class Student{ var scores:Int[] = Array(count:5,repeatedValue:0) subscript(index:Int) -> Int{ get{ return scores[index];

PHP ----学习笔记(二)

date()函数用于格式化时间或日期 date(format,timestamp) mktime()函数可为指定的日期返回Unix时间戳 mktime(hour,minuite,second,mouth,day,year,is_dst) include和require语句用于在执行流中向其他文件插入有用的代码 include 'filename'; require 'filename'; fopen() 函数用于在PHP中打开文件 fclose() 函数用于关闭打开的文件 feof() 函数检测

概率图模型学习笔记(二)贝叶斯网络-语义学与因子分解

概率分布(Distributions) 如图1所示,这是最简单的联合分布案例,姑且称之为学生模型. 图1 其中包含3个变量,分别是:I(学生智力,有0和1两个状态).D(试卷难度,有0和1两个状态).G(成绩等级,有1.2.3三个状态). 表中就是概率的联合分布了,表中随便去掉所有包含某个值的行,就能对分布表进行缩减. 例如可以去掉所有G不为1的行,这样就只剩下了1.4.7.10行,这样他们的概率之和就不为1了,所以可以重新标准化(Renormalization).如图2所示. 图2 反之也可以

linux网络编程学习笔记之二 -----错误异常处理和各种碎碎(更新中)

errno 在unix系统中对大部分系统调用非正常返回时,通常返回值为-1,并设置全局变量errno(errno.h),如socket(), bind(), accept(), listen().erron存放一个正整数来保存上次出错的错误值. 对线程而言,每个线程都有专用的errno变量,不必考虑同步问题. strerror converts to English (Note: use strerror_r for thread safety) perror is simplified str

【Java学习笔记之二十六】深入理解Java匿名内部类

在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始化匿名内部类.匿名内部类使用的形参为何要为final. 一.使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 } 在这里我们看到使用匿名内部类我们必须要继承一个父类或者

菜鸟的jQuery源码学习笔记(二)

jQuery对象是使用构造函数和原型模式相结合的方式创建的.现在来看看jQuery的原型对象jQuery.prototype: 1 jQuery.fn = jQuery.prototype = { 2 //成员变量和方法 3 } 这里给原型对象起了一个别名叫做jQuery.fn.要注意的是这个jQuery.fn可不是jQuery对象的属性,而是jQuery构造方法本身的属性,它是不会传给它所创建的对象的.如果你在控制台敲$().fn的话输出的结果会是undefined.接下来看看原型对象里面有些

《lua程序设计(第二版)》学习笔记(二)

直接上代码 1: -- 第2章 类型与值 2: -- 动态类型的语言,每个值都携带自身类型信息 3: print("类型打印,每个值都携带自身类型"); 4: print(type("Hello world")); -- string 完全采用8位编码,字符可以具有任何数值编码,可以将任意二进制数据存储到字符串中 5: --[[ 6: string是不可变值,不能像C一样修改一个字符创中某个字符,而是应该 7: 创建一个新的字符串; 8: 和其他对象一样,都是自动内