Shell变量运算

目录

一、数值变量的运算及特殊变量 

1.1 expr 命令

1.2 数值运算

1.2.1 $(())  运算

1.2.2 $[ ] 整数运算

1.3 let 运算命令

1.4 bc 运算命令

1.5 常用的运算表达式

二、特殊变量

2.1 环境变量

2.2 只读变量 

2.3 位置变量

三、预定义变量

3.1 $* 和 $@ 的区别


一、数值变量的运算及特殊变量 

在 Bash Shell 环境中,只能进行简单的整数运算,不支持小数运算
整数值的运算主要通过内部命令 expr 进行
运算符与变量之间必须有至少一个空格。

运算内容:加(+)、减(-)、乘(*)、除(/)、取余(%)
运算符号:$(()) 和$[]
运算命令:expr和let

  • expr:特殊字符需要转义
  • let:不需要转义特殊字符

运算工具:bc(系统自带)

  • 可以取余

1.1 expr 命令

expr 命令:不仅可以运算,还支持输出到屏幕

常用的 几种运算符如下所述。 
+:加法运算。 
-:减法运算。 
\*:乘法运算,注意不能仅使用“*”符号,否则将被当成文件通配符。 
/:除法运算。 
%:求模运算,又称为取余运算,用来计算数值相除后的余数。

案例一:常量运算

案例二:变量运算

案例三

案例四:利用脚本算

[root@localhost ~]# vim test.sh

###进入编辑脚本

#!/bin/bash
#1、定义输出的数字
read -p "请输入第一个数字:" num1
read -p "请输入第二个数字:" num2
#2、定义执行的加法运算操作
sum=`expr $num1 + $num2`

echo "求和数为:$sum"

[root@localhost ~]# chmod +x test.sh  ###给予脚本执行权限
[root@localhost ~]# sh test.sh 
请输入第一个数字:20
请输入第二个数字:30
求和数为:50

1.2 数值运算

  • $[] 和 $(())  必须要和echo在一起用因为他只能运算无法输出结果;
  • 总结:进行算术运算和数值比较

1.2.1 $(())  运算

双小括号

  • 整数扩展。这种扩展计算是整数型的计算,不支持浮点型。
  • ((exp))结构扩展并计算一个算术表达式的值,如果表达式的结果为0,那么返回的退出状态码为1,或者是"假",而一个非零值的表达式所返回的退出状态码将为0,或者是"true"。若是逻辑判断,表达式exp为真则为1,假则为0。
  • 只要括号中的运算符、表达式符合c语言运算规则,都可用在((exp))中,甚至是三目运算符。作不同进位(如二进制、八进制、十六进制)运算时,输出结果全都自动转化成了十进制。如:echo  $((16#5f)) 结果为 95(16进位转十进制)
  • 单纯用(())也可重定义变量值,比如a=5;((a++))可将 $a 重定义为 6
  • 常用于算术运算比较,双括号中的变量可以不使用符号前缀·。括号内支持多个表达式用逗号分开。只要括号中的表达式符合。c语言运算规则,比如可以直接使用for((i=0 ; i  &lt ; 5 ; i++)),如果不使用双括号,则为for i in seg 04或者 for i in  0..4。再如可以直接使用if((符号前缀。括号,内支持多个表达式用逗号分开。只要括号中的表达式符合c语言运算规则,比如可以直接使用for(( i=0 ; i&lt ; 5 ; i++)),如果不使用双括号,则为for i in seq 0 4或者for i in {0..4}。再如可以直接使用 if ((符号前缀。括号内支持多个表达式用逗号分开。只要括号中的表达式符合c语言运算规则,比如可以直接使用for((i=0 ; i<5 ; i++)),如果不使用双括号,则为for i in seq 04或者for i in 0..4。再如可以直接使用 if((1<5)),如果不使用双括号,则为if  [ $i  -lt 5]。

案例:

##可以有负数

1.2.2 $[ ] 整数运算

  • $[ ] 变量的运算,可省略 [ ] 里的 $
  • 整数运算包含特殊字符,因此特殊字符不需要转义
  • 遵循先乘除后加减,否则需要用括号括起来表示优先运算

案例

1.3 let 运算命令

  • let的运算可以改变变量本身的值,但不显示结果,需要echo,其他的运算方式可以做运算但不改变变量本身的值
  • let 运算是 shell 内部命令,专注数学运算,语法简洁,不需要运算符,特殊字符转义,对于简答的运算数值操作,推荐使用 let 运算,简洁明了;

案例:

下面运算结果一样,只是输出方式不同

1.4 bc 运算命令

  • 使用bc进行运算,支持小数运算,但在脚本中不可直接使用否则会进入交互界面,可以用echo结合管道使用

案例

赋值运算

真假判断

1.5 常用的运算表达式

  • i=$(expr 12 \* 5)
  • i=$((12 * 5))
  • i=[12 * 5]
  • let i=12*5
  • i++ 相当于 i=$[$i+1]
  • i-- 相当于 i=$[$i-1]
  • i+=2 相当于 i=$[$i+2]

二、特殊变量

2.1 环境变量

  • 环境变量指的是出于运行需要而由 Linux 系统提前创建的一类变量,主要用于设置用户的工作环境,包括用户宿主目录、命令查找路径、用户当前目录、登录终端等;
  • 环境变量的值由 Linux 系统自动维护,会随着用户状态的改变而改变;
  • 使用 env 命令可以查看到当前工作环境下的环境变量,对于常见的一些环境变量应了解其各自的用途;(一般都用全大写定义,注意和自定义变量区分)
    •  USER 表示用户名称,USER表示当前账户的账户名称等
    • HOME 表示用户的宿主目录
    • LANG 表示语言和字符集
    • PWD 表示当前所在的工作目录
    • PATH 表示命令搜索路径等
    • RANDOM表示随机数,会返回0-32767的整数

执行应用程序文件,将/root 加入到PATH环境变量当中后,在运行的时候就会加载命令,就可以使用这个命令

PATH 变量用于设置可执行程序的默认搜索路径,当仅指定文件名称来执行命令程序时,Linux 系统将在 PATH 变量指定的目录范围查找对应的可执行文件,如果找不到则会提示“command not found”

因xxt.sh不在 $PATH 的目录里面,所以系统无法识别无法直接用,需要跟上绝对路径使用该脚本
 

永久性设置路径

案例

方法一:

2.2 只读变量 

Shell 变量中有一种特殊情况,一经设定,其值是不可改变的,这种变量被称为只读变 量。在创建变量的时候可将其设置为只读属性,也可以将已存在的变量设置为只读属性,只 读变量主要用于变量值不允许被修改的情况
只读变量不可以改变值也不可以被删除,除非退出;

### readonly用来定义只读变量,一旦使用readonly定义的变量在脚本中就不能更改

### unset 命令也无法退出,需要退出登录

2.3 位置变量

当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量;

  • 位置变量也称为位置参数,使用 $1、$2、$3、…、$9 表示
  • 命令或脚本本身的名称使用 “$0” 表示

案例:

案例二

三、预定义变量

预定义变量是由 Bash 程序预先定义好的一类特殊变量,用户只能使用预定义变量,而 不能创建新的预定义变量,也不能直接为预定义变量赋值。预定义变量使用“$”符号和另一个符号组合表示;

  • $#:表示命令行中位置参数的个数。  
  • $*:表示所有位置参数的内容,这些内容当做一个整体
  • $@:表示列出所有位置参数,但是是以单个的形式的列出 
  • $?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0 值均表示执行出现异常。 
  • $0:表示当前执行的脚本或程序的名称
  • $$:表示返回当前进程的进程号
  • $!:返回最后一个后台进程的进程号

案例

案例二

案例三

3.1 $*$@ 的区别

  • $*、$@:表示命令或脚本要处理的参数。
  • $*:把所有参数看成以空格分隔的一个字符串整体(单字符串)返回,代表"$1 $2 $3 $4"。
  • $@:把各个参数加上双引号分隔成n份的参数列表,每个参数作为一个字符串返回,代表"$1""$2""$3""$94"。

注意:

  • $* $@ 都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数。

案例:区分 $* 和 $@ 

案例二

总结:

  • $*: 是将参数全部当做一个整体
  • $@: 是将参数每一个都当做单独的个体
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值