加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Shell脚本学习第五天——算术运算符

发布时间:2020-12-15 16:36:06 所属栏目:安全 来源:网络整理
导读:我希望有个如你一般的人 如山间清爽的风 如古城温暖的光 从清晨到夜晚 由山野到书房 只要最后是你 就好 ?????????????????????——张嘉佳 《从你的全世界路过》 一、chars=` seq -s ” ” 100 ` :从1到100,以空格为分隔符。 获取字符串长度的三种方法: ec


我希望有个如你一般的人
如山间清爽的风
如古城温暖的光
从清晨到夜晚
由山野到书房
只要最后是你
就好

?????????????????????——张嘉佳 《从你的全世界路过》


一、chars=` seq -s ” ” 100 ` :从1到100,以空格为分隔符。

获取字符串长度的三种方法:

 echo ${#chars}    #取长度   291
 echo $chars|wc -m   #292
 echo $(expr length "$chars")

二、查看命令运行的时间:

time for i in $(seq 22222);do ./a.out ;done;

这里我在程序中加了个延时 1 秒。


三、常见数值运算:(( )) let expr bc $[ ]

1、(( ))运算符:

??用于执行简单的整数运算(不能是小数或者字符串,bc命令可用于小数计算),除了内嵌双引号无需转义。

运算符和C语言基本一样:

实例:

两个 * 就是幂:
((a=1+2**3-4%3)) //内部定义变量
b=$((1+2**3-4%3))

比较:
echo $((3>2)) // 输出: 1 (真)

等差数列求和: 1/2 n *(a1+an)
echo $(( 100*(1+100)/2 ))

各种(( ))运算的shell脚本例子:

#!/bin/bash
a=6
b=2
echo "a-b = $ (( $a - $b ))"
echo "a+b = $ (( $a + $b ))"
echo "a*b = $ (( $a * $b ))"
echo "a/b = $ (( $a / $b ))"
echo "a**b = $ (( $a ** $b ))"
echo "a%b = $ (( $a % $b ))"

命令行传参:

把 a=6 和 b=2 改成 a=$1,b=$2 :

最简单的四则运算命令:

echo $(($1$2$3))


2、let

let 和(( ))基本一样 效率比较低,用得比较少

实例:

i=2
let i=i+8  (( i = i+8 ))
输出:10

去掉let变为定义:
 i=i+8  
echo $i
输出:i+8

3、expr:

三、expr (运算符前后必须有空格)

expr 2 + 2   
expr 2 * 2  

expr $[2+3]     //中括号表达方法
expr $[2*3]

a=3
i=`expr $a + 1`

实例一:
??判断文件的扩展名,如果不匹配返回0 。匹配成功返回文件名字符长度。

expr "test.txt" : ".*.pub"

实例二:
判断输入的数是否为整数
加法正确就是整数($?获取上一次输入的返回值):

read -p -t 7 "please input:"  a   //-t 7 7秒不输入就超时
    expr $a + 0  &>/dev/null   //丢弃输出和错误 不在屏幕上报错
    [ $? -eq 0 ] && echo int || echo chars

&> 等价于 >/dev/null 2>&1
这样的写法.这条命令的意思是将标准输出和错误输出全部重定向到/dev/null中,也就是将产生的所有信息(出错,标准输出)丢弃。

加while tree 循环
do

done


保证可以连续判断不退出。


4、bc运算:

??bc是一种任意精度的计算语言,注意是一种语言,它提供了一些语法结构,比如条件判断、循环等,可以说是很强大的,=在实际中很少找到需要这个用途的场合 。另外一个用途就是用来进行进制转换。
??上面我们介绍的expr之支持整数运算,但对于浮点运算就无能为力了,而且expr不能进行指数运算,而都有bc这些都不再话下。

参数:

  • -i 强制交互模式;

  • -l 使用bc的内置库,bc里有一些数学库,对三角计算等非常实用;

  • -q 进入bc交互模式时不再输出版本等多余的信息。

特殊变量:

ibase,obase 用于进制转换。

  • ibase是输入的进制,obase是输出的进制,默认是十进制;
  • scale 小数保留位数,默认保留0位。

首先用命令 bc -l -q 进入交互模式。

$bc -l -q

ibase=2                    /*指定进制转换的输入机制为二进制,输出默认为是十进制*/
1010
10

4^2                           /*指数运算,注:指数不能为浮点数*/
16

4*a(1)                        /*计算π值,a()是个函数:arctan() 3.14159265358979323844 quit /*退出*/

每日编程练习
??给某个用户不断发送消息:
可以用write usrname;建立连接,然后在键盘上控制输入。

/dev/pts是远程登陆(telnet,ssh等)后创建的控制台设备文件所在的目录。所以你要先知道他的pts目录下的编号。

while true
 do
        sleep 1
        echo "nihao" >/dev/pts/9
 done

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读