0
点赞
收藏
分享

微信扫一扫

Linux的shell编程篇之变量与运算

一、变量

在多数语言中,变量一般都包括四个特性:作用、名称、类型、值。

  1、变量的命名规则:

    1.1、变量的名称可以是由字母、数字、下划线组成,但不可以以数字开头。

    1.2、在bash中,变量的默认类型是字符串型。如执行数字运算,则需要指定变量类型为数值型。

    1.3、与其他语言一样,变量与值之间使用“=”连接,但“=”左右不能存在空格。

    1.4、变量的值如果有空格,需要使用单引号或者双引号括起来。

    1.5、变量的值是可以叠加的。

    Linux的shell编程篇之变量与运算_自定义

     1.6、变量的名称使用大写,目的是与Linux的系统命令区分开来。

  2、变量的分类:

    用户自定义变量:最常见的变量,可以由用户自由定义变量的作用、名称、类型、值。

    环境变量分为两种:

        用户自定义环境变量:可以由用户自由定义变量的作用、名称、类型、值。

        系统环境变量:这种变量的作用、名称、类型都是系统固定好的,一旦修改便会出现问题。变量的值可以由用户自己修改但不可随意修改。

    位置参数变量:与预定义变量一致。

    预定义变量:就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用。变量的作用、名称、类型都是固定的,用户可以自定义值。

  3、用户自定义变量的增用改查删。

    Linux的shell编程篇之变量与运算_自定义_02

     Linux的shell编程篇之变量与运算_环境变量_03

     Linux的shell编程篇之变量与运算_自定义_04

     Linux的shell编程篇之变量与运算_提示信息_05

     Linux的shell编程篇之变量与运算_提示信息_06

     Linux的shell编程篇之变量与运算_提示信息_07

     注意:下面这个图中的QQ变量,第一个是本不存在的变量,第二个我赋予了空值(空值也是一个值)。但两者的输出结果一样,我们没法分辨。这时候就需要(set -u)命令来区分。

    Linux的shell编程篇之变量与运算_环境变量_08

    下图中删除了QQ变量,然后使用了(set -u)命令,此时再次输出变量QQ,就显示报错。

     Linux的shell编程篇之变量与运算_提示信息_09

   4、用户自定义环境变量。

    与用户自定义变量大致相同。不过需要执行export命令,可以将用户自定义变量变为用户自定义环境变量。

    Linux的shell编程篇之变量与运算_环境变量_10

     两者的区别:用户自定义变量只能适用于当前的shell,不存在与其他子shell中。而用户自定义环境变量在整个系统中都是生效的。

    执行(pstree)命令(没有此命令可以安装 psmisc 依赖包),可以查看进程树。这里显示的当前bash(也成为父shell)。

    Linux的shell编程篇之变量与运算_提示信息_11

    当执行(bash)命令后,便进入了子shell。

     Linux的shell编程篇之变量与运算_环境变量_12

    Linux的shell编程篇之变量与运算_环境变量_13

     输入exit,可以退回到上一级shell中。

  5、系统环境变量。

    最常用的PATH环境变量

     在执行命令的时候,我们输入的都是命令本身,并没有填写路径,但是却可以在任意目录执行。这里使用到的就是PATH环境变量。

    Linux的shell编程篇之变量与运算_自定义_14

     上面图可以看到,PATH变量定义的是一些路径,通过(:)来进行分开。所以,我们将写好的脚本放在一个固定目录中。再将目录的绝对路径保存在PATH变量中,调用脚本时,任意目录直接输入脚本名称就可以执行。

    Linux的shell编程篇之变量与运算_自定义_15

     上面添加的PATH环境变量也是临时的,一旦重启就会消失。要想永久生效,需要写入配置文件中。

  6、位置参数变量

    6.1、$n:其中,n为数字,0代表命令本身,1-9代表从第一至第九个参数,若参数十个以上时举例{10}。

    一个简单的加法计算器1

    Linux的shell编程篇之变量与运算_自定义_16

     Linux的shell编程篇之变量与运算_自定义_17

     上面的图总共输出了两行。而前面输入的79  21 就是执行命令后面添加的两个参数,分别赋值给了num1与num2进行加法计算,输出100;而第二行是echo $0 输出命令本身。

    6.2、$*、$@:代表执行命令时后面的参数。$*会把所有的参数看成为一个整体;而$@是把每个参数当作一个整体。

    Linux的shell编程篇之变量与运算_环境变量_18

     Linux的shell编程篇之变量与运算_自定义_19

     两种不同的输出结果,第一种结果是变量a将输入的五个参数作为一个值输出;第二种结果是变量b将五个参数作为五个值输出。

    6.3、$#:统计变量的个数。

    Linux的shell编程篇之变量与运算_提示信息_20

     Linux的shell编程篇之变量与运算_自定义_21

    6.4、接收键盘输入

    上面的输入都需要在命令后面加上参数,也可以设置成为带有提示信息的等待用户输入。

    read  选项  变量

    选项:-p “提示信息”:在等待键盘输入时给予的提示信息

       -t   数字:等待时间(单位秒)

       -n  数字:限制用户的输入长度

       -s:隐藏用户的输入(密文输入)

    简易加法计算器2

    Linux的shell编程篇之变量与运算_提示信息_22

  7、预定义变量

    7.1、$?:最后一次命令的执行状态。在多数默认情况下,返回值为0,则代表上一条命令程序正常执行;若返回值非0,则代表上一条命令程序执行不准确。

    7.2、$$:当前进程的进程号(PID)。

    7.3、$!:后台运行的最后一个进程的进程号(PID)。

  8、变量的类型

    在shell中,变量的默认类型是字符串类型。如果想要改变变量的类型可以有以下几种方法。

    8.1、declare +/-  选项   变量

    其中 + :取消设定变量的类型

       - :设定变量的类型

       a :设定/取消变量为数组型

       i :设定/取消变量为整数型

      -x :将变量设定为环境变量

      -r :将变量设定为只读变量

      -p :查询变量的类型

    export可以将变量变为环境变量,实际上export命令就是调用的declare -x 这个命令;declare -r可以将变量变为只读变量,只读变量不能修改变量名、不能修改值、不能删除,但这种变量除了系统自带的,用户自动设定的都是临时生效,一旦系统重启,变量就会消失。所有的变量的与变量类型都可以使用declare -p 命令查询。

    8.2、调用expr命令进行数值运算

    Linux的shell编程篇之变量与运算_自定义_23

     要注意“+”的两边都有空格

    8.3、调用let命令进行数值的运算

    Linux的shell编程篇之变量与运算_环境变量_24

    8.3、使用"$(())"、“$[]”格式进行数值的运算

    Linux的shell编程篇之变量与运算_环境变量_25

    上面这些数值运算都是整数型数值运算,小数点后直接舍弃,不会四舍五入。

二、运算

  1、运算符

  四则运算符:(+ - * /);有括号的先算括号内的;%取模(21%4,相当于21/4=5····1,所以21%4的结果为1)。

  2、变量的运算

    2.1、整数变量运算

    Linux的shell编程篇之变量与运算_自定义_26

     Linux的shell编程篇之变量与运算_自定义_27

     2.2、数组型变量运算

    通常情况下,一个变量内保存一个值。但是数组型的变量,一个变量内保存的多个值,而区分这些值靠的就是变量的下标。

    正常的标准写法是declare -a num[0]=123。但是由于num[0]这个写法就比较特别,所以将 declare -a 省略系统也是认识的。

    下标一般情况下从0开始。

    Linux的shell编程篇之变量与运算_环境变量_28

  3、变量的测试与内容置换

    Linux的shell编程篇之变量与运算_自定义_29

举报

相关推荐

0 条评论