bash中常用的条件测试有三种:


测试方法:

[ expression ]    命令测试法

[[ expression ]]  关键字测试法

test expression 

整数测试:

    -gt 大于

    -lt 小于   

    -ne 不等于

    -eq 等于

    -ge 大于等于

    -le 小于等于

例:

    INT1=63

    INT2=77

    [ $INT1 -eq $INT2 ]

    [[ $INT1 -eq $NET2 ]]

    test $INT1 -eq $NET2


字符测试:

== :測試是否相等,相等為真,不等為假

!= :測試是否不等,不等為真,相等為假

>

<

-n string:測試指定字符串是否為空,空則真,不空則假

-z string:測試指定字符串是否不空,不空為真,空則假


文件测试:

-e FILE:測試文件是否存在

-f FILE:测试文件是否为普通文件

-d FILE:测试指定路径是否为目录

-r FILE:测试当前用户对指定文件是否有读取的权限

-w FILE:测试当前用户对指定文件是否有写入的权限

-x FILE:测试当前用户对指定文件是否有执行的权限

 

例:写一个脚本,给定一个文件,如果是普通文件,就显示之;如果是一个目录,亦显示之;否则,显示此为无法识别文件。

#!/bin/bash

#

file=/etc/passwd            \\定义变量file


if [ ! -e $file ];then         \\如果文件不存在

        echo "no such file."  \\就显示文件不存在

        exit 2            \\结束脚本

fi


if [ -f $file ];then           \\如果文件存在就判断是不是普通文件   

        echo "common file."    \\是就显示文件为普通文件

elif [ -d $file ];then          \\否则就测试是否为目录

        echo "Directory."      \\是就显示是目录

else                       \\否则 

        echo "unknow"         \\就显示文法识别

fi


定义脚本退出状态码

提前结束脚本:exit 

exit #

如果脚本没有明确定义退出状态码,那么,最后执行的一条命令的退出码既为脚本的退出状态码:


测试脚本是否有语法错误:

bash -n +脚本名

逐条显示执行:bash -x +脚本名


bash变量的类型:

    本地变量(局部变量)

    环境变量

    位置变量:$1,$2,.... 引用位置参数  shift:轮替

./filetest,sh /etc/fatab /etc/inittab

$1:/etc/fatab

$2:/etc/inittab

例:能接受一个参数(文件路径),判定:此参数如果是一个存在的文件,就显示“OK”,否则就显示“NO such file.”

#!/bin/bash

#

if [ -e $1 ]; then

    echo "OK."

else 

    echo "NO such file."

fi


例:写一个脚本,给脚本传递两个参数,显示两个参数的和,成积。

#!/bin/bash

if [ $# -lt 2 ];then

    echo "Usage:file3.sh ARG1 ARG2"

fi

echo "the sum is $[$1+$2]."

echo "the product is $[$1*$2]"


    特殊变量 

    $?:上一条命令的退出状态码

    $#:参数的个数

    $*:参数列表

    $@:参数列表