shell编程之文件测试及if多分支语句

文件测试用法:

    -e :判断文件是否存在,如果不存在返回的状态为假
    -f :判断文件是否为普通文件
    -d :判断是否为目录
    -x :判断当前用户是否可执行此文件
    -w :判断当前用户是否可写此文件
    -r :判断当前用户是否可读此文件
    如 [   -e  /etc/inittab    ]

if多分支语句

    if 条件一 ;then
        执行语句
    elif 条件二 ;then
    执行语句
    。。。
    else
        执行语句
    fi

写一个脚本,给定一个文件:如果是一个普通文件,就打印this is file。;如果是一个目录就打印this is directory。否则,此为无法识别之文件;脚本内容如下:
#!/bin/bash

    FILE=$1    #$1是位置变量,表示接受脚本后面接的第一个参数,$2,$3 ...表示接第二,三...个参数
    #如果后面接的不止一个参数,只取第一个参数。

    # $# 是特殊变量,获取参数的个数($* 列出所有参数),如过参数小于一个,就exit 1 退出,退出时带上退出状态码1,
    # 如果不加上退出状态码,它默认的退出状态码就会以上一条命令的执行状态为准。
    NUM=$#
    if [ $NUM -lt 1 ];then
        echo "脚本后面需接一个参数,如:judge.sh /etc/passwd ."
        exit 1
    fi

    if [ -f $FILE  ];then
        echo "this is file."
    elif [ -d $FILE ];then
        echo "this is directory."
    else
        echo "无法识别此文件."
    fi

另外需要注意的是,如果参数比较少只有一两个可以用$1,$2...,那如果有几十上百个呢?我们不可能用一大堆$1...吧,此时我们要用到 shift语句,如shift 1 表示使用完上一个参数后,就将第一个参数丢掉,把第二个参数当作第一个参数,以此类推。如下脚本:
#!/bin/bash
echo $1
shift 1
echo $1
shift 1
echo $1
shift 1
echo $1

执行结果:

    [root@localhost ~]# sh shift.sh 1 2 3 4
    1
    2
    3
    4

另外如果要调试脚本,可以使用 bash -x xxx.sh 可以打印出脚本的执行过程,方便找出错误。

猜你喜欢

转载自blog.51cto.com/13803030/2138877