shell - 变量、算术运算、逻辑运算
shell:
属于面向过程、解释型语言、动态语言、弱类型语言
-
解释型语言:需要使用要给解释器将代码解释为机器能执行的二进制指令
-
动态语言:变量类型不用事先声明,可随时改变类型
-
弱类型语言:数据类型不用指定,默认均为字符型
shell变量:
变量的的命名规则:
由数字、字母、下划线组成,不能用数字作为变量的开头,且不能使用短横线
定义变量:
变量名=值
shell属于弱类型语言,使用变量不用事先定义数据类型且数据类型默认为字符型
例如:
NUM=12345
NUM1=123.5 #整数和小数赋值给变量,它们也会被视为字符串
Str=fdafafa #变量赋值时有没有使用引号,值都会以字符串的形式存储
Str="fadffas"
引用变量:
其中的变量引用会被替换为变量值
格式:
$变量名 或 ${变量名}
shell中的引号:
-
双引号:属于弱引用,其中的变量引用会被替换为变量值
-
单引号:属于强引用,单引号里面是什么,输出的时候就是什么
-
反引号:命令替换,将反引号内的Linux命令先执行,$()也是用作命令替换的
例如:
[root@CentOS7 ~]# NUM=123
[root@CentOS7 ~]# echo "num=$NUM" #将双引号中的变量替换为对应的值
num=123
[root@CentOS7 ~]# echo 'num=$NUM' #所见即所得
num=$NUM
[root@CentOS7 ~]# echo `ls` #显示命令的执行结果
anaconda-ks.cfg
位置变量:
是bash内置的变量,通过命令行将参数传递给shell脚本的对应参数
-
$n #表示指定位置的参数,比如$1表示的就是shell脚本第一个位置的参数值
-
$0 #表示脚本文件的名称
-
$* #表示shell脚本所有的参数
-
$# #表示shell脚本参数的个数
shell的退出状态码: $?
进程执行完毕以后,会使用$?来保存这个进程的状态码,状态码的取值范围是:0--255
-
0 #表示执行成功:
-
1-255 #表示执行失败
因为执行失败有很多可能性,比如语法错误、命令没找到等,所以状态码不一样。
shell自定义退出的状态码
定义方法:
exit [num]
exit作用:
-
脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字
-
如果exit后面无数字,终止退出状态取决于exit命令前面命令执行结果
-
如果没有exit命令,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码
shell实现算数运算
shell使用特定的工具可以实现算数运算。
注意:bash 只支持整数,不支持小数
let工具:
-
变量计算中不需要加 $来表示变量
-
let只能用于赋值计算,不能直接输出来
格式:
let 赋值变量=表达式
说明:
这种方法需要借助一个变量,将计算后的值赋值给这个变量后进行输出
例如:
[root@CentOS7 ~]# let a=1+1;echo $a;
2
bc工具:
支持标准输入和标准输出
例如:
[root@CentOS7 ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1+1
2
99+99
198
(interrupt) Exiting bc.
[root@CentOS7 ~]# echo 1+1 | bc
2
expr工具
-
值与运算符号之间需要用空格隔开
-
使用expr命令进行乘法运算时,需要将”乘号”转义
例如:
[root@CentOS7 ~]# expr 1+1
1+1
[root@CentOS7 ~]# expr 1 + 1
2
$ [] 和 $ (())
((var=算术表达式)) 和let工具等价
var=$[算术表达式]
shell的逻辑运算:
-
与:& --- 都为真才是真
-
或:| --- 有一个为真就是真
-
非:! --- 结果取反
-
异或:^(脱字符) --- 异或的两个值,相同为假,不同为真
短路运算:
短路与 &&
CMD1 && CMD2
第一个CMD1结果为真 (1),第二个CMD2必须要参与运算,才能得到最终的结果
第一个CMD1结果为假 (0),总的结果必定为0,因此不需要执行CMD2
短路或 ||
CMD1 || CMD2
第一个CMD1结果为真 (1),总的结果必定为1,因此不需要执行CMD2
第一个CMD1结果为假 (0),第二个CMD2 必须要参与运算,才能得到最终的结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了