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

前端之家收集整理的这篇文章主要介绍了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
原文链接:https://www.f2er.com/bash/391701.html

猜你在找的Bash相关文章