1、expr的空格问题
例子,写一个10的阶乘。
这样写:
#!/bin/bash
let factorial=1
for a in `seq 1 10`
do
factorial=`expr $factorial"*"$a`
done
echo "10!=$factorial"
执行结果:
10!=1*1*2*3*4*5*6*7*8*9*10
expr变成了字符串的相加。原因是expr在运算符与整数间要留有空格。
#!/bin/bash
let factorial=1
for a in `seq 1 10`
do
factorial=`expr $factorial "*" $a`
done
echo "10!=$factorial"
执行结果:
10!=3628800
例子:
lsn@lsn:~/testsh$ expr 4"*"4
4*4
lsn@lsn:~/testsh$ expr 4 "*" 4
16
lsn@lsn:~/testsh$ expr 4 "*"4
expr: syntax error
2、[]中括号两边要留空格,比较符两边要留空格。
代码:
#!/bin/bash
unset var
while ["$var" != "end"]
do
echo -n "please input a number:"
read var
if ["$var" = "end"]
then
break
fi
echo "var is $var"
done
lsn@lsn:~/testsh$ ./5bak.sh
./5bak.sh: line 4: [: missing `]'
3、$(( )) 的用途:它是用来作整数运算的。
在 bash 中,$(( )) 的整数运算符号大致有这些:
+ - * / :分别为 "加、减、乘、除"。
% :余数运算
& | ^ !:分别为 "AND、OR、XOR、NOT" 运算。
在 $(( )) 中的变量名称,可于其前面加 $ 符号来替换,也可以不用
例子:
lsn@lsn:~/testsh$ a=5;b=7;c=2;echo $((a+b+c));echo $(($a+$b+$c))
14
14
单纯用 (( )) 也可重定义变量值,或作 testing:
lsn@lsn:~/testsh$ a=5;b=7;echo $((a < b))
1
lsn@lsn:~/testsh$ a=5;((a++));echo $a
6
4、$? 包含了最后一个可执行命令退出的状态。如果是0为正常退出,非0为不正常。在c中是$status。
lsn@linux:~$ cp xyz
cp: missing destination file operand after `xyz'
Try `cp --help' for more information.
lsn@linux:~$ echo $?
1
lsn@linux:~$ ls
111 Documents examples.desktop Pictures Templates
Desktop Downloads Music Public Videos
lsn@linux:~$ echo $?
0
lsn@linux:~$
5、vi的查找和替换,支持正则表达式。
替换
:1,$s/E830/e820/g 用%s/E830/e820/g 也可以。
1,$表示从第一行到最后一行
s表示替换
g表示全局
查找并统计次数
:%s/apt-get/&/gn
统计apt-get出现的次数
%表示从第一行到最后一行
%s/APT-GET/ /gn 带/ /gn进行统计次数。