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作用:

  1. 脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字

  2. 如果exit后面无数字,终止退出状态取决于exit命令前面命令执行结果

  3. 如果没有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 必须要参与运算,才能得到最终的结果

posted on 2022-10-18 14:10  背对背依靠  阅读(88)  评论(0编辑  收藏  举报