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]#
浙公网安备 33010602011771号