首页 > 代码库 > Shell数值操作

Shell数值操作

1.计算的数值的五种方法:
((i++))
let i++
i=$(expr $i + 1)
i=$(echo $i+1|bc)
i=$(echo $i 1|awk ‘{printf $1+$2}‘)
 
2.time命令用来统计命令的执行时间,这部分时间包括总的运行时间,用户空间
执行时间,内核空间执行时间,它通过ptrace系统调用实现。
 
3.取模使用符号%,而求幂只有bc使用的符号为^,其他命令使用的符号均为**。
 
4.bc程序是Linux下的计算器,可以用来计算进制转换。例如:
echo "obase:10;ibase8;11" | bc
另一种处理进制转换的方法是:
echo $((8#20))
表示八进制的20,表示的十进制的值是多少。
 
5.浮点计算有两种方式:
* 使用bc计算:
echo "scale=3;1/13" | bc
如果不加scale的话,需要使用下面的格式:
echo "1/13" | bc -l
* 使用awk计算:
echo "1 3" | awk ‘{printf("%0.3f",$1+$2)}‘
 
6.$#表示传给脚本的参数个数,不包括当前可执行文件的在内,例如:
./test.sh 1 # $#的值为1。
$?表示上一条命令的返回值。
 
7.环境变量RANDOM产生0到32767之间的随机数,awk的rand函数产生0到1之间的随机数。
在使用awk的rand函数的时候,需要首先用srand函数埋下种子,例如:
echo "" | awk ‘{srand();printf("%f",rand());}‘
 
8.seq可以产生一系列数,这些数可以按照指定的间隔递增。例如:
seq 5 # 产生1到5五个数字
seq 1 2 6 # 产生数列 1 3 5
seq -s : 1 5 # 产生数列 1:2:3:4:5
seq -w 1 100 # 产生数列 001 002 ... 100
seq -f "0x%g" 1 3 # 产生数列 0x1 0x2 0x3
 
9.sed的使用方法
* cat regular_express.txt | sed ‘s/[^a-zA-Z]/\n/g‘ | \
sed ‘/^$/d‘ | sort | uniq -c | sort -k 1 -n -r | head
上面的这条命令用于统计文本中出现次数最多的前十个单词,
sed ‘s/[^a-zA-Z]/\n/g‘ 用来分割单词,sed ‘/^$/d‘用来去除空行,
sort 将分割好的单词排序,使得相同的单词排列在一起,这样就可以
使用 uniq -c 来进行统计每个单词出现的次数了,最后将统计好的单
词按照出现的次数排序,head 只提取出现在前十个的单词。
* cat index.html | sed -e ‘s/[^A-Za-z]/\n/g‘ | sed ‘/^$/d‘ | \
grep ‘^the$‘ | uniq -c | sed ‘s/[^0-9]//g‘
查找 the 出现的次数
 
10.shift 每次都将命令行参数向左移动一个,因此当前要处理的参数总为$1


参考资料

===============

Shell编程范例 -- by falcon

Shell数值操作