十年运维系列之基础篇 - Linux
作者:曾林
联系:1494445739@qq.com
版权:文章未经同意请勿转载
一、引言
变量是任何一种编程语言必不可少的组成部分,用于存放各类数据。脚本语言通常不需要在使用变量之前声明其类型。只需直接赋值就可以了。在Bash中,每一个变量的值都是字符串。无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。有一些特殊的变量会被shell环境和操作系统环境用来存储一些特别的值,这类变量就被称为环境变量。
变量采用常见的命名方式来进行命名。当一个应用程序执行的时候,它接收一组环境变量。可以使用env命令在终端中查看所有与此终端进程相关的环境变量。对于每个进程,在其运行时的环境变量可以使用下面的命令来查看:
cat /proc/$PID/environ
其中,将PID设置成相关进程的进程ID(PID总是一个整数)。
假设有一个叫做mysql的应用程序正在运行。我们可以使用pgrep命令获得mysql的进程ID。如下图:
那么,我们就可以通过以下的命令来获取与该进程相关的环境变量。执行命令如下图:
以上命令执行的结果返回一个包含环境变量以及对应变量值的列表。每一个变量以name=value的形式来描述,彼此之间由null字符(\0)分割。这里可以将"\0"用换行“\n”来替代,就可以让输出重新格式化了。
二、普通变量和环境变量的操作技巧
1. 获取字符串长度
可以用下面的方法获得变量值的长度。
length=${#var}
比如下图命令执行的结果:
2. 获取当前使用的bash
可以使用两种方式来获取当前使用的是哪种shell。命令如下:
echo $SHELL 或 echo $0
命令执行的结果如下图所示:
3. 检查是否为超级用户
UID是一个重要的环境变量,可以用来检查当前脚本是以超级用户还是以普通用户的身份运行的。例如:
1 #!/bin/bash 2 3 # foo.sh - test bash variables 4 5 if [[ $UID != 0 ]]; then 6 echo "Non root user. Please run as root" 7 else 8 echo "Root user" 9 fi
三、通过shell进行数学计算
无论哪种编程语言都少不了算术操作,Bash shell同样提供了多种此类操作。
在Bash shell环境中,可以利用let、(())、和[]执行基本的算数操作。而在进行高级操作时,expr和bc这两个工具也会非常有用。
1. let命令
可以用普通的变量赋值方法定义数值,这时,它会被存储为字符串。然而,我们可以用一些方法使它能像数字一样进行处理。
#!/bin/bash no1=4 no2=5
let命令可以直接执行基本的算数操作。当使用let时,变量名前并不需要再添加$。例如:
let result=no1*no2 echo $result
自加和自减操作,例如:
1 let no++ 2 let no--
简写形式,例如:
let no+=6 ==> let no=no+6 let no-=6 ==> let no=no-6
2. []命令
操作符[]的使用方法和let命令类似:
no1=2
no2=8
result=$[ no1 * no2 ]
3. (())命令
算术运算也可以使用(()),但使用(())时,变量名之前需要加上$。如下面脚本:
no1=18 result=$((no1 + 50))
4. expr命令
expr同样可以用于基本算术操作,用法如下:
result=`expr 3 + 5` echo $result
特别需要注意的是,在操作*操作的时候,由于会引起bash通配符扩展,所以需要用转义字符。
注: 在采用上面的命令的时候,都只能用于整数运算,而不支持浮点数。如果需要算术计算同样支持浮点数的时候,就需要使用bc程序。