shell編程之文件測試及if多分支語句
阿新 • • 發佈:2018-07-08
oot rect 否則 his 內容 pre $2 上一個 調試 文件測試用法:
#!/bin/bash
-e :判斷文件是否存在,如果不存在返回的狀態為假
-f :判斷文件是否為普通文件
-d :判斷是否為目錄
-x :判斷當前用戶是否可執行此文件
-w :判斷當前用戶是否可寫此文件
-r :判斷當前用戶是否可讀此文件
如 [ -e /etc/inittab ]
if多分支語句
if 條件一 ;then
執行語句
elif 條件二 ;then
執行語句
。。。
else
執行語句
fi
寫一個腳本,給定一個文件:如果是一個普通文件,就打印this is file。;如果是一個目錄就打印this is directory。否則,此為無法識別之文件;腳本內容如下:
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多分支語句