欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux的Shell编程——变量

程序员文章站 2023-10-16 20:07:16
Linux的Shell编程——变量 摘要:本文主要学习了Shell命令中的变量。 什么是变量 简单的说,变量就是让某一个特定字串代表不固定的内容。 变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或一个数字,就把它存放在一个变量中。 每个变量都有一个名字 ......

linux的shell编程——变量

摘要:本文主要学习了shell命令中的变量。

什么是变量

简单的说,变量就是让某一个特定字串代表不固定的内容。

变量是计算机内存的单元,其中存放的值可以改变。当shell脚本需要保存一些信息时,如一个文件名或一个数字,就把它存放在一个变量中。

每个变量都有一个名字,所以很容易引用它。变量可以定制用户本身的工作环境。使用变量可以保存有用信息,使系统获知用户相关设置。变量也可以用于保存暂时信息。

变量的命名规范

在定义变量时,有一些规则需要遵守。

1)变量名可以由字母、数字和下画线组成,但是不能以数字开头。

2)变量用等号“=”连接,“=”左右两侧不能有空格。这是shell语言特有的格式要求。在绝大多数的其他语言中,“=”左右两侧是可以加入空格的。但是在shell中如果在“=”左右两侧加入空格,那么linux会误以为这是系统命令,是会报错的。

3)变量值中如果有空格,则需要使用单引号或双引号包括。双引号括起来的特殊字符可以保留原有含义,而单引号括起来的内容都是普通字符。

例如:设置变量 var="lang is $lang" ,获取变量 echo $var ,得到结果 lang is zh_cn.utf-8 。

4)在变量值中,可以使用转义符“\”将特殊字符变成普通字符。

例如:设置变量 var=hello\ word ,获取变量 echo $var ,得到结果 hello word 。

5)如果要把命令的执行结果作为变量值赋予变量,则需要使用反引号`命令`或$(命令),建议使用$(命令)。

例如:设置变量 var=$(date) ,获取变量 echo $var ,得到结果 2019年 07月 15日 星期一 10:14:33 cst 。

6)在bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。

例如:设置变量 var=1+2 ,获取变量 echo $var ,得到结果 1+2 。

7)如果需要増加变量值,那么可以进行变量叠加,变量叠加可以使用"$变量名"或${变量名},建议使用${变量名}。

例如:设置变量 var=123 ,修改变量 var=${var}456 ,获取变量 echo $var ,得到结果 123456 。

8)自定义变量建议小写,环境变量名建议大写,便于区分。

用户自定义变量

说明

用户自定义变量是最常用的变量类型,其特点是变量名和变量值都是由用户*定义的。

设置和修改变量

变量的设置和修改很简单,使用“=”符号连接左边的变量名和右边的变量值即可:

1 [root@localhost ~]# 变量名=变量值

显示和使用变量

可以使用echo命令来获取变量,但是在使用变量时,需要在变量名前面加上“$”符号:

1 [root@localhost ~]# $变量名

也可以使用set命令查看所有的变量,包括用户自定义变量和环境变量:

1 [root@localhost ~]# set

删除变量

要想删除自定义变量,可以使用unset命令:

1 [root@localhost ~]# unset 变量名

环境变量

说明

环境变量和用户自定义变量最主要的区别在于,环境变量是全局变量,而用户自定义变量是局部变量。用户自定义变量只在当前的shell中生效,而环境变量会在当前shell和这个shell的所有子shell中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的shell中生效。

这是有区别的,如果环境变量不写入配置文件,那么当前shell一旦终止,这个环境变量就会消失,而只有写入配置文件才会永久地在所有shell中生效。

在linux中一般通过环境变量配置操作系统的环境,如提示符、查找命令的路径、用户家目录等,这些系统默认的环境变量的变量名是固定的,我们只能修改变量的值。

子程序

如果目前这个shell的情况下,去启用另一个新的shell,新的那个shell就是子程序。

在一般的状态下,父程序的自定义变量是无法在子程序内使用的。但是通过export将变量变成环境变量后,就能够在子程序里使用了。

设置变量

环境变量和用户自定义变量的设置方法相比,只需通过export命令将变量声明为环境变量即可:

1 [root@localhost ~]# export var=hello

也可以先把变量声明为本地变量,再用export声明为环境变量:

1 [root@localhost ~]# var=hello
2 [root@localhost ~]# export var

显示和使用变量

环境变量也可以使用echo命令来获取:

1 [root@localhost ~]# $变量名

set既可以查询用户自定义变量,也可以查询环境变量。也可以使用env命进行环境变量的查询,env命令不会显示用户自定义变量:

1 [root@localhost ~]# env

删除变量

环境变量的删除方法和用户自定义变量是一样的,都使用unset命令:

1 [root@localhost ~]# unset 变量名

其他类型的变量

位置参数变量

在linux的命令行中,当一条命令或脚本执行时,后面可以跟多个参数,我们使用位置参数变量来表示这些参数。

其中,$0代表命令行本身,$1代表第1个参数,$2代表第2个参数,依次类推。当参数个数超过10个时,就要用大括号把这个数字括起来,例如,${10}代表第10个参数。

在shell中可以识别的位置参数变量:

1 $n:n为数字,$0代表命令本身,$1到$9代表第1个到第9个参数,10以上的参数需要用大括号包含,如${10}。
2 $*:这个变量代表命令行中所有的参数,把所有的参数看成一个整体。
3 $@:这个变量也代表命令行中所有的参数,不过$@把每个参数区别对待。
4 $#:这个变量代表命令行中所有参数的个数。

预定义变量

预定义变量是在shell一开始时就定义的变量,这一点和默认环境变量有些类似。不同的是,预定义变量不能重新定义,用户只能根据shell的定义来使用这些变量。

严格来说,位置参数变量也是预定义变量的一种,知识位置参数变量的作用比较统一,所以我们把位置参数变量单独划分为一类数量。

shell中主要的预定义变量:

1 $?:最后一次执行的命令的返回状态。如果这个变量的值为0,则证明上一条命令正确执行。如果这个变量的值不为0,则证明上一条命令执行错误。
2 $$:当前进程的进程号(pid)。
3 $!:后台运行的最后一个进程的进程号(pid)。

声明变量类型

所有变量的默认类型是字符串型,使用declare命令可以声明变量的类型。

基本语法

1 [root@localhost ~]# declare [+/-] [选项] 变量名

选项说明

1 -:给变量设定类型属性。
2 +:取消变量的类型属性。
3 -a:将变量声明为数组型。
4 -i:将变量声明为整数型。
5 -r:将变量声明为只读变量。注意,一旦设置为只读变量,既不能修改变量的值,也不能删除变量,甚至不能通过+r取消只读属性。
6 -x:将变量声明为环境变量。
7 -p:显示指定变量的被声明的类型。

变量的运算

在shell中所有的变量默认都是字符串型。也就是说,如果不手工指定变量的类型,那么所有的数值都是不能进行运算的:

1 [root@localhost ~]# a=1
2 [root@localhost ~]# b=2
3 [root@localhost ~]# c=$a+$b
4 [root@localhost ~]# echo $c
5 1+2

如果想要进行数学运算,除了上面提到的declare命令,还可以使用“$((运算式))”或“$[运算式]”方式运算:

1 [root@localhost ~]# echo $(($a+$b))
2 3
3 [root@localhost ~]# echo $[$a+$b]
4 3

可以按照个人习惯选择使用。