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


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

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


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

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

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

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

time for i in $(seq 11111);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     
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值