shell笔记

来源:互联网 发布:jenkins源码下载 编辑:程序博客网 时间:2024/06/05 19:58

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进行统计次数。




0 0
原创粉丝点击