使用shell运算

日常用到的就是整数和浮点数的运算,两者都有很多方式实现,各自记录一种吧,因为写多了,我也记不住。。。

整数运算 (())

1. 简单运算

echo $(( 5 + 3 ))
8
echo $(( 5 / 3 ))
1
echo $(( 2 / 3 ))
0
a = 3; echo $(( ${a} + 3))
6

从上面例子可以知道,$(())只支持整数运算,如果相除的话,只保留整数,并且不会四舍五入。

2. 判断

< 
<=
==
!=
>=
> 
% 取余

以上判断,若为真,返回1,假返回0. 可以利用这个小功能去做简单的判断。

整数计算expr

expr 5 + 5
10
str="123 456 789";expr substr "$str" 5 3
456
str="123 456 789";expr substr "$str" 5 3
456 789
echo ${#str}
11
$expr length "$str"
11
str="123 456 789";expr index "$str" 9
11
str="123 456 789";expr index "$str" "a"
0

expr不仅可以进行计算,还可以对字符串进行取值,语法为 expr substr "${str}" position, 从匹配位置取到最后。expr substr "${str}" position length, 从匹配位置取n个,坐标都是从1开始的。还可以计算字符串的长度。还可以返回第一个匹配字符的索引,如果没找到,返回0。

浮点计算

echo "scale=3;4/5" | bc
0.800
a=0.355;printf "%.1f\n" "$a"
0.4  #可以使用printf进行四舍五入, bc不会进行四舍五入。
cat 1.txt
2 3
4 7
3 2
6 8
cat 1.txt | gawk '{printf "%.3f\n", $1/$2}'
0.667
0.571
1.500
0.750
cat 1.txt | gawk '{printf "%.2f\n", $1/$2}'
0.67
0.57
1.50
0.75

利用awk+printf,既可以四舍五入,又可以格式刷输出。

补充:printf

printf是echo 的加强版, printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。以后可以多多使用~
语法:printf "string format" arguments

 printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 
 姓名     性别   体重kg
  printf "%-s,%-s,%.2f\n" 郭靖 男 66.1234
  郭靖,男,66.12

%s 代表字符型
%d 代表十进制,我觉得可以理解为整数?
%f 代表浮点数。%.2f保留两位小数
\n 换行
\t 是tab键,目前还不知道用途是什么
%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充.
可以参考 (http://www.runoob.com/linux/linux-shell-printf.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 当女王的大军将第一颗燃烧弹投进泰达希尔的时候,战争已经彻底爆发。 没有人会天真的认为部落会仅对付暗夜精灵,能对付暗...
    墨凰徵阅读 741评论 0 0
  • 今天,是美好的一天,我们去了达人村游玩。 中午,顶着炎炎烈日,我们来到了村里。一进门,我就看到五头巨大的石牛迎接我...
    大猴小虎阅读 2,642评论 0 1
  • 让Google Scholar显示“Import into BibTeX”的方法: 打开http://schola...
    Qinginging阅读 4,522评论 0 0
  • ‘’上有天堂,下有苏杭"。这句话从小我就耳熟。那时我爷爷在杭州工作,奶奶会不定期的前去探亲。所以会经常带我哥或姐去...
    食之乐阅读 3,851评论 14 26