• Shell学习(二)——变量和基本数据类型


    参考博客:
    [1]LinuxShell脚本——变量和数据类型
    [2]shell只读变量删除
    一、变量

    定义变量的语法
    定义变量时,变量名和变量值之间使用“=”分隔,并且等号两边不能有空格:
        变量名=变量值
    
    变量名规则
    变量名的定义必须遵循以下规则:
    1 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
    2 中间不能有空格,可以使用下划线。
    3 不能使用标点符号。
    4 不能使用bash里的关键字。
    
    使用变量
    使用一个定义过的变量,只要在变量名前面加美元符号即可,建议将变量名使用 {} 括起来之后再添加美元符号:
        echo ${name}
    
    修改变量为只读
    使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变,也不能被删除:
        readonly name
    
    删除变量
    使用unset命令可以删除变量,但不能删除只读变量:
        unset name
    
    
    位置参数
    运行Shell脚本文件时我们可以给它传递一些参数,这些参数在脚本文件内部可以使用 $n 的形式来接收。例如: $1 表示第一个参数, $2 表示第二个参数,依次类推。
    如果参数个数达到或者超过了10个,那么就得用 ${n} 的形式来接收了,例如: ${10} 、 ${23} 。 {} 的作用是为了帮助解释器识别参数的边界,这跟使用变量时加 {} 是一样的效果。
    
    脚本内容:
    #!/bin/bash
    echo "第一个参数 : $1"
    echo "第二个参数 : $2"
    脚本调用:
    [root@localhost ~]# sh test.sh A B
    执行结果:
    第一个参数 : A
    第二个参数 : B
    
    特殊变量
    除了位置参数以外,Shell中还有一些特殊变量,这些特殊变量描述了传入参数的某些信息:
    1 $0:当前脚本的文件名。
    2 $n:n是一个数字,表示第几个参数。
    3 $#:传递给脚本或函数的参数个数。
    4 $*:传递给脚本或函数的所有参数。当被双引号""包含时,会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。
    5 $@:传递给脚本或函数的所有参数。当被双引号""包含时,仍然将每个参数都看作一份数据,彼此之间是独立的。。
    6 $?:上个命令的退出状态,或函数的返回值。
    7 $$:当前Shell的进程ID。对于Shell脚本,就是这些脚本所在的进程ID。
    

    二、数据类型

    1、字符串
    字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。
    建议使用双引号,因为双引号里可以有变量和特殊字符,可以按照变量和特殊字符去使用。
    
    声明字符串类型的变量:
        name="Sam"
    拼接字符串:
        hello="hello, $name !"
    2、整数型
    在Shell中所有的变量默认都是字符串型。也就是说,如果不手工指定变量的类型,那么所有的数值都是不能进行运算的:
    [root@localhost ~]# a=1
    [root@localhost ~]# b=2
    [root@localhost ~]# c=$a+$b
    [root@localhost ~]# echo $c
    1+2
    如果想要进行数学运算,可以使用“$((运算式))”或“$[运算式]”方式运算:
    [root@localhost ~]# echo $(($a+$b))
    3
    [root@localhost ~]# echo $[$a+$b]
    3
    3、数组
    bash支持一维数组(不支持多维数组),并且没有限定数组的大小。用括号来表示数组,数组元素用空格符号分割开。定义数组的一般形式为:
    数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。
    
    声明数组类型的变量:
        数组名=(值1 值2 ... 值n)
    也可以通过指定下标来声明:
        数组名[下标]=值
    获取数组指定下标的值:
        ${数组名[下标]}
    使用“@”符号可以获取数组中的所有元素:
        ${数组名[@]}
    
  • 相关阅读:
    linux脚本Shell之awk详解(二)
    linux脚本Shell之awk详解
    漫谈计算摄像学 (二):利用光场实现“先拍照后对焦”
    漫谈计算摄像学 (一):直观理解光场(Light Field)
    利用OpenCV检测图像中的长方形画布或纸张并提取图像内容
    2048理论上最高能玩到多少分?
    蛋疼之作:99行代码的2048
    用一个玩具例子说明基于视频的超分辨率重建的基本思想
    [C++]二维数组还是一维数组?
    三维空间中如何寻找和一组给定直线垂直程度最高的直线
  • 原文地址:https://www.cnblogs.com/shujk/p/13409651.html
Copyright © 2020-2023  润新知