使用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)

你可能感兴趣的:(使用shell运算)