Linux的shell编程篇之变量与运算
一、变量
在多数语言中,变量一般都包括四个特性:作用、名称、类型、值。
1、变量的命名规则:
1.1、变量的名称可以是由字母、数字、下划线组成,但不可以以数字开头。
1.2、在bash中,变量的默认类型是字符串型。如执行数字运算,则需要指定变量类型为数值型。
1.3、与其他语言一样,变量与值之间使用“=”连接,但“=”左右不能存在空格。
1.4、变量的值如果有空格,需要使用单引号或者双引号括起来。
1.5、变量的值是可以叠加的。
1.6、变量的名称使用大写,目的是与Linux的系统命令区分开来。
2、变量的分类:
用户自定义变量:最常见的变量,可以由用户自由定义变量的作用、名称、类型、值。
环境变量分为两种:
用户自定义环境变量:可以由用户自由定义变量的作用、名称、类型、值。
系统环境变量:这种变量的作用、名称、类型都是系统固定好的,一旦修改便会出现问题。变量的值可以由用户自己修改但不可随意修改。
位置参数变量:与预定义变量一致。
预定义变量:就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用。变量的作用、名称、类型都是固定的,用户可以自定义值。
3、用户自定义变量的增用改查删。
注意:下面这个图中的QQ变量,第一个是本不存在的变量,第二个我赋予了空值(空值也是一个值)。但两者的输出结果一样,我们没法分辨。这时候就需要(set -u)命令来区分。
下图中删除了QQ变量,然后使用了(set -u)命令,此时再次输出变量QQ,就显示报错。
4、用户自定义环境变量。
与用户自定义变量大致相同。不过需要执行export命令,可以将用户自定义变量变为用户自定义环境变量。
两者的区别:用户自定义变量只能适用于当前的shell,不存在与其他子shell中。而用户自定义环境变量在整个系统中都是生效的。
执行(pstree)命令(没有此命令可以安装 psmisc 依赖包),可以查看进程树。这里显示的当前bash(也成为父shell)。
当执行(bash)命令后,便进入了子shell。
输入exit,可以退回到上一级shell中。
5、系统环境变量。
最常用的PATH环境变量
在执行命令的时候,我们输入的都是命令本身,并没有填写路径,但是却可以在任意目录执行。这里使用到的就是PATH环境变量。
上面图可以看到,PATH变量定义的是一些路径,通过(:)来进行分开。所以,我们将写好的脚本放在一个固定目录中。再将目录的绝对路径保存在PATH变量中,调用脚本时,任意目录直接输入脚本名称就可以执行。
上面添加的PATH环境变量也是临时的,一旦重启就会消失。要想永久生效,需要写入配置文件中。
6、位置参数变量
6.1、$n:其中,n为数字,0代表命令本身,1-9代表从第一至第九个参数,若参数十个以上时举例{10}。
一个简单的加法计算器1
上面的图总共输出了两行。而前面输入的79 21 就是执行命令后面添加的两个参数,分别赋值给了num1与num2进行加法计算,输出100;而第二行是echo $0 输出命令本身。
6.2、$*、$@:代表执行命令时后面的参数。$*会把所有的参数看成为一个整体;而$@是把每个参数当作一个整体。
两种不同的输出结果,第一种结果是变量a将输入的五个参数作为一个值输出;第二种结果是变量b将五个参数作为五个值输出。
6.3、$#:统计变量的个数。
6.4、接收键盘输入
上面的输入都需要在命令后面加上参数,也可以设置成为带有提示信息的等待用户输入。
read 选项 变量
选项:-p “提示信息”:在等待键盘输入时给予的提示信息
-t 数字:等待时间(单位秒)
-n 数字:限制用户的输入长度
-s:隐藏用户的输入(密文输入)
简易加法计算器2
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命令进行数值运算
要注意“+”的两边都有空格
8.3、调用let命令进行数值的运算
8.3、使用"$(())"、“$[]”格式进行数值的运算
上面这些数值运算都是整数型数值运算,小数点后直接舍弃,不会四舍五入。
二、运算
1、运算符
四则运算符:(+ - * /);有括号的先算括号内的;%取模(21%4,相当于21/4=5····1,所以21%4的结果为1)。
2、变量的运算
2.1、整数变量运算
2.2、数组型变量运算
通常情况下,一个变量内保存一个值。但是数组型的变量,一个变量内保存的多个值,而区分这些值靠的就是变量的下标。
正常的标准写法是declare -a num[0]=123。但是由于num[0]这个写法就比较特别,所以将 declare -a 省略系统也是认识的。
下标一般情况下从0开始。
3、变量的测试与内容置换