shell脚本的编写

shell脚本的编写:
1、bash的算术运算:bash不支持浮点型,取圆整(丢失小数点后的数值)
使bash执行算术运算必须按照以下格式书写:1、let 算术表达式   2、$[算术表达式]    3、$((算术表达式))
若变量一次步进幅度为1则可以写作:SUM++ | ++SUM  ,SUM-- | --SUM
2、bash中的语句逻辑运算:
&&与运算  语句1&&语句2  语句1假便不在执行语句2
||或运算  语句1||语句2    语句1真便不在执行语句2
!非运算  !语句
在bash中逻辑与,与逻辑或称作短路操作符,既是只计算前面的语句
3、bash中的条件测试:
测试的表达式:
[ condition ]    作为命令
` condition `    shell中的关键字
test condition    
(1)、整数测试:
-eq:等于  -gt:大于  -ge:大于等于  -lt:小于  -le:小于等于  -ne:不等于
例如: #test $A -eq $B
#A=40
#B=60
# [ $A -ge $B ] && echo "$A is the max number" || echo "$B is the max number"
(2)、字符串测试:
==:内容一样,做测试条件  !=:内容不一样   -z:是否为空,空为真,非空为假   -n:是否不为空,空为假,非空为真    
例如:#[ -z "$A" ] && echo "A is null." || echo "A is not null!"
#[ "$A" = "$B" ] && echo "Yiyang" || echo "Not yiyang!"    
(3)、文件测试
-e FILE        文件是否存在,存在为真,不存在为假
-f FILE        是否为普通文件
-d FILE        是否为目录
-h/-L FILE    是否为软连接
-b FILE        是否为块设备
-c FILE        是否为字符设备
-r FILE     当前用户对文件是否有读权限
-w FILE        写权限
-x FILE        执行权限
例如:#[ -e /tmp/scripts ] && [ -d /tmp/scripts ] && mkdir /tmp/scripts
4、sed:stream editor行编辑器:非交互式编辑器,没有破坏性,sed的工作模式是将文件的原内容拷贝到自己的模式空间中,对复制出的这份内容进行操作,并非对原内容进行操作,所以没有破坏性。
格式:sed "搜索内容command" inputfile,非交互式,将处理后的数据显示在屏幕上
搜索范围:/PATTERN/command    #sed '/\<de.\{5\}\>/,/\<in\>/d' even.sh
    /PATTERN1,/PATTERN2command     第一次符合PATTERN1到第一次符合PATTERN2的行
参数:d    删除行(例如:#sed‘5d’ even.sh)
    p    显示匹配到的内容所在的行
    -n    只显示被模式匹配到的内容
    a\    在匹配到内容的行下面添加一行或多行    #sed '3,5a\This is a new line' even.sh
    i\    在其行上面添加一行或多行    \nThis is second line
    !    对匹配条件取反
*    s    sed 'ADDR1,[email protected]@[email protected]'
    -e    sed -e '' -e '' -e '' inputfile    连接多个处理机制(例如:
sed -e '1,[email protected] /.*/   \(/\)\{1\} @ \1 -e '/d' )
    -i    直接修改原文件
    -f    从另外的文件读取sed的处理机制并且对文件进行执行
5、for语句,其循环方式是遍历循环
格式:for 变量 in 列表;do
    语句1;
    语句2;
    ……
    done
而在for循环中定义循环列表可以分为:简单列出、{1..20}(从1到20)、`seq 1 2 10`(从1开始每次加2循环到10)
如:计算100所有能被3整除的数的和

如:计算100以内所有偶数的和


6、while语句,其循环方式为只要条件满足就一直循环下去,否则将跳出循环
格式:while 条件;do
    语句1
    语句2
    ……
    done
如:提醒用户输入一个用户名,如果用户输入的为空,则一直提醒其输入。


7、until语句,其循环方式和while正好相反,只要条件不满足则循环下去,否则将跳出循环
格式:until 条件;do
    语句1
    语句2
    ……
    done

8、if语句:分为单分支、双分支、多分支
单分支:if 测试条件;then
        语句
        ……
    fi
如:创建目录/tmp/maintenance,如果存在就删除后在创建。


双分支:if 测试条件;then
        语句
        ……
    else
        语句
        ……
    fi
多分支:if 测试语句1;then
        语句
        ……
    elif 测试语句2;then
        语句
        ……
    elif 测试语句3;then
        语句
        ……
    else
        语句
    fi

如:检查/var/log下的所有文件,如果是普通文件就输出为普通文件,如果是目录就输出是目录,其他的则输出unknow。

当脚本书写完成之后:1、使用bash -n SCRIPTFILE检查脚本文件是否含有错误。2、使用bash SCRIPTFILE执行脚本文件,或者给脚本文件加上执行权限,直接对脚本文件进行执行!








本文转自 向阳草米奇 51CTO博客,原文链接:http://blog.51cto.com/grass51/776753,如需转载请自行联系原作者