1. 程式人生 > >shell編程之文件測試及if多分支語句

shell編程之文件測試及if多分支語句

oot rect 否則 his 內容 pre $2 上一個 調試

文件測試用法:

    -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 可以打印出腳本的執行過程,方便找出錯誤。

shell編程之文件測試及if多分支語句