我希望有个如你一般的人
如山间清爽的风
如古城温暖的光
从清晨到夜晚
由山野到书房
只要最后是你
就好
——张嘉佳 《从你的全世界路过》
一、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