day63 shell的数学运算学习

day63 shell的数学运算学习

特殊变量具体场景

$@ 和 $* 
都可以将用户给脚本传入多个位置的参数,提取为一个单个的数据当你直接echo打印查看这两个变量的值

# 1.直观的来所这两个特殊变量的作用,直接打印,不用for循环去取值

#!/bin/bash

echo "---\$@---- 您给脚本传入的参数是:$@"

echo "==============================================="

echo "----\$*-----您给脚本传入的参数是:$*"

#执行案例
[root@master-61 ~]# bash vars.sh a1 a2 a3 a4 b1 b2 b3
---$@---- 您给脚本传入的参数是:a1 a2 a3 a4 b1 b2 b3
===============================================
----$*-----您给脚本传入的参数是:a1 a2 a3 a4 b1 b2 b3
[root@master-61 ~]# 


# 具体的区别是
$@ 在整合所有的参数后,依旧可以区分单个元素

$* 在整合后所有的参数,将所有的位置的参数,整合到单个字符串中

总结

一般的话,直接使用$@ 一般准没错

常量

常量在shell中没有严格的语法支撑,但是又一个约定写法(全大写)以及通过命令强制性地转化为常量。
在其他的数据类型中更加丰富的语法中,支持设定。

数据类型

给数据定义一个类型,字符串,小数,整数。

shell中,统一为了字符串来处理,但是如果变量值是数值的形式,依旧支持数字的计数的玩法。

name="yzk"

age=18 --->也是一个字符串
数据就是指变量的值,如web-site="www.yzkit.xyz",后面这个引号里,就是数据的值。

变量就是用来反应的,保持数据的状态,以及变化,

shell 语言

shell 是一个解释型语言,弱类型的语言,动态的。
shell 变量的数据的类型,是由解释器在运行shell,决定是什么的数据的类型
bash 中默认都是字符串变量,

我们自己去观察,理解为数字类型,但是shell定义这个数据,在计算机中依然是字符串

  • 数值

    • age=18
  • 字符串

    • name=yzk
  • 数组

    • student=("yzk" "hello")
  • 列表

    shell 比较的特殊,不像其他的编程的语言,有明确的数据类型,是什么就是什么。
    也就是说,在shell的语言中一切都是 字符串 。
    

    (shell中都是以字符串的形式对待)

具体shell的数据类型有哪些,以及如何用。

数字

# int 整形,如存储年龄,等级,身份证等等。。。
age=10
id=189289798
level=3

----------------------------------------------

# floot 浮点型,存储小数
salary=3330.33
weight=33.3

-----------------------------------------------

数据类型变量支持的运算以及对应的算数符号

加号 + += ++
减号 - -= --
乘号 * *=
除号 /
取余 % %=

数据类型变量用于for循环时支持的比较运算以及对应的预算符号

等于: ==
不等于: !=
小于等于: <=
大于等于: >=
大于: >
小于: <
逻辑与 &&
逻辑非 !
逻辑或 ||

支持shell变量运算的命令

1. expr  #只进行整数的运算
2, $(())    #双括号的运算,只支持整数的运算,效率更好
3, $[]		#整数的运算

基于命令进行数学计算

  • 直接对数字计算
  • 对变量进行计算

expr

[root@master-61 ~]# 
[root@master-61 ~]# expr 3 + 4 
7
[root@master-61 ~]# expr 3 - 4
-1
[root@master-61 ~]# expr 3 \* 4
12
[root@master-61 ~]# expr 10 / 2
5
[root@master-61 ~]# 
[root@master-61 ~]# 
[root@master-61 ~]# expr 3 / 4
0
[root@master-61 ~]# 

# expr 命令的要求是运算符两边要有空格,有特殊符号的需要转义

变量的数学计算

[root@master-61 ~]# n1=16
[root@master-61 ~]# n2=4
[root@master-61 ~]# 
[root@master-61 ~]# 
[root@master-61 ~]# expr ${n1} + ${n2}
20
[root@master-61 ~]# expr ${n1} /  ${n2}
4
[root@master-61 ~]# expr ${n1} -  ${n2}
12
[root@master-61 ~]# expr ${n1} \*  ${n2}
64
[root@master-61 ~]# 

$[] 这个方式用的很多

[root@master-61 ~]# num1=16
[root@master-61 ~]# num2=4
[root@master-61 ~]# echo "计算的结果是 $[ num1 + num2 ]"
计算的结果是 20
[root@master-61 ~]# echo "计算的结果是 $[ num1 -  num2 ]"
计算的结果是 12
[root@master-61 ~]# echo "计算的结果是 $[ num1 /  num2 ]"
[root@master-61 ~]# echo "计算的结果是 $[ num1 *  num2 ]"
计算的结果是 64
[root@master-61 ~]# 

let

强烈的建议,直接用

$[] 这种的写法,用的居多

计算命令语法如下

let 结果的变量=变量1 运算符 变量2

不得有任何的空格,得连接起来写。

[root@master-61 ~]# let result=${num1}+${num2}
[root@master-61 ~]# 
[root@master-61 ~]# 
[root@master-61 ~]# let result2=${num1}-${num2}
[root@master-61 ~]# let result3=${num1}/${num2}
[root@master-61 ~]# let result4=${num1}*${num2}
[root@master-61 ~]# 
[root@master-61 ~]# 
[root@master-61 ~]# echo $result 
20
[root@master-61 ~]# echo $result2
12


[root@master-61 ~]# echo $result3
4
[root@master-61 ~]# echo $result4
64

你知道有多种的命令,也就是以后再去解决问题的时候,可以考虑到不同的场景,自己去选择最合适得解决的方法,写代码嘛,千变万化没有什么标准的答案,能尽量少得bug去完成最终的结果,即可。

就好比你这一周,是写一个数据库备份的文件脚本

老板只想看到数据库的备份,他看到数据备份就放心了,不关心我们的脚本写的怎么样,
老板只想看到结果,

你的程序是否按要求
1.定时的备份,每周5的凌晨3点,crontab -l
2.备份到指定的目录中 /backup/
3.备份数据文件,是否按照要求添加时间戳,且要压缩在 /backup/mysql.sql.日期.tar.gz
4.suo'y


[root@m-61 ~/part3-shell]## 这里的写法,涉及到 awk的引号细节,awk调用shell变量的引号细节,比较高级,绕,先简单记住语法即可
[root@m-61 ~/part3-shell]#
[root@m-61 ~/part3-shell]#
[root@m-61 ~/part3-shell]#
[root@m-61 ~/part3-shell]#
[root@m-61 ~/part3-shell]#awk 'BEGIN{print  "'${num1}'" + "'${num2}'"     }'
15
[root@m-61 ~/part3-shell]#
[root@m-61 ~/part3-shell]#awk 'BEGIN{print  "'${num1}'" - "'${num2}'"     }'
9
[root@m-61 ~/part3-shell]#
[root@m-61 ~/part3-shell]#awk 'BEGIN{print  "'${num1}'" * "'${num2}'"     }'
36
[root@m-61 ~/part3-shell]#
[root@m-61 ~/part3-shell]#
[root@m-61 ~/part3-shell]#awk 'BEGIN{print  "'${num1}'" / "'${num2}'"     }'
4
[root@m-61 ~/part3-shell]#
[root@m-61 ~/part3-shell]#
posted @ 2025-05-03 19:37  国家一级冲浪yzk  阅读(8)  评论(0)    收藏  举报