shell脚本的变量运算与运行以及定义变量的补充

1,241 阅读2分钟

一、变量的运算

格式: expr [变量1] 运算符 [变量2] {运算符 [变量3] }......

1. 常用运算符

运算法运算符
加法运算+
减法运算-
乘法运算\*
除法(取商数)运算/
求模(取余数)运算%

image.png

2. 整数运算格式

1. echo $[变量1 运算符 变量2]

image.png

2. echo $(()) 括号中带有运算表达式(该运算方法乘法不需要\可直接使用)

image.png

3. let命令

格式:

let i=9%2      #i为变量名 =后面跟运算表达式

image.png

let i++       #相当于变量i+1
let i--       #相当于变量i-1
let i+=2      #相当于变量i+2
let i-=2      #相当于变量i-2

image.png

PS:上述运算一般只支持整数之间的运算,含小数的运算如下

3. 小数运算

3.1 bc命令

bc 命令是一个提供任意精度算术的交互式进程

echo "9.8+4.5" | bc             #将需要输出的运算内容交给bc命令
echo "scale=2;1.32*3.49" | bc   #保留2位小数的小数运算,scale=2

image.png

3.2 awk命令

格式:

awk 'BEGIN{print 9.34+5.46}'

image.png

awk命令最多支持小数点后五位的运算

二、环境变量

2.1 常用的环境变量

环境变量由系统提前创建,用来设置用户的工作环境

使用env命令可查看当前系统中的环境变量

image-20220823144743853.png 常用环境变量如下所示:

HOSTNAME #当前主机的主机名
SHELL    #当前的shell环境
HISTSIZE #查看当前历史命令条目数
USER     #当前的用户名
PATH     #执行脚本的路径
PWD      #当前用户所在目录
LANG     #当前使用的语言及字符集
HOME     #当前用户家目录
LOGNAME  #当前用户的名称

2.2 如何在全局变量中使用脚本命令

环境变量的全局配置文件在/etc/profile,在此文件中定义的变量作用于所有用户。每个用户还有自己的独立配置文件(~/.bash_profile)。可以用来长期变更成设置某个环境变量。

方法一:复制脚本到环境变量目录中

我们想要直接执行脚本的命令,我们可以将脚本文件复制到我们$PATH所定义的环境变量目录中:

image.png

方法二:使用软链接

我们还可以使用软链接的方式将脚本文件与环境变量目录做个链接:

image.png

方法三:在$PATH的定义中添加脚本文件目录(临时添加)

image.png

image.png

image.png 注意:在我们对定义环境变量目录的$PATH进行添加后,我们所添加的脚本目录仅仅是临时的,重启端口或者重启系统将失效

方法四:在环境变量配置文件中添加文件目录(永久添加)

环境变量的全局配置文件在/etc/profile,我们在该文件中进行配置:

image.png

image.png

2.3 删除变量(unset命令)

格式:unset [变量名]

image.png

2.4 只读变量的设置

1. readonly命令

格式:readonly [变量名]=[变量值]

image.png 如果要删除只读变量,可以重启系统达到删除效果

2. 在环境变量配置文件中修改

image.png

image.png

三、脚本传递参数的方式

我们使用脚本传递参数的方式可以往脚本中传输不同的数值,使脚本实现代码的通用性,传递参数有以下两种方式:

3.1 位置变量的概念与用法

我们可以通过位置变量,定义脚本文件中的变量的值:

./demo.sh 10 20 30 40
    $0    $1 $2 $3 $4

$0            #该变量代表脚本本身
$1,$2,$3,$4   #分别代表脚本文件中第一,第二,第三,第四个变量的值
${10},${11}   #如果变量超过两位数,需要使用${}格式,变量值才能正常输入

我们接下来编写一个脚本查看脚本是否可以正常输出我们输入的变量值:

image.png

image.png

3.2 使用read-p赋值,将变量值输入脚本文件中

用法一: image.png

image.png

用法二:

image.png

image.png

四、预定义变量

预定义变量的分类与含义

预定义变量含义
$*脚本或命令要处理的参数,会把脚本后面跟的所有参数当作一个整体返回,代表“$1 $2 $3 $4”(整个字符串内容会当成一个整体,字符串数量为1)
$@脚本或命令要处理的参数,会把脚本后面跟的所有参数看作多个以空格分隔的个体返回,代表“$1” “$2” “$3” “$4”
$0脚本本身
$#脚本后面要处理的参数个数
$?返回上一条Linux命令或者脚本执行的结果,0为执行正常,非0值为执行异常
  • $*与$@的区别

我们编写一个shell脚本来观察这两个预定变量的区别:

没有双引号的情况输出结果如下: image.png

image.png

有双引号的情况输出结果如下:

image.png

image.png

$?的实际用法:判断命令或任务的执行是否成功

image.png