Shell中的test命令用于檢查某個條件是否成立,它可以進行數值、字符和文件三個方面的測試,那么如何使用shell來判斷文件夾是否存在呢?今天小編就就帶大家來看看吧。
文件夾不存在則創建
文件存在則刪除
判斷文件夾是否存在
判斷文件是否存在
文件比較符
如果身邊就有電腦,可以跟著上文一起操作,這樣可以更好的理解喔
本文章基于Lenovo品牌、Windows10系統撰寫的。
了解你的意思,首先,test命令是判斷某一個特定的文件相關信息,也就是當你使用test這個命令的時候,你是清楚它叫什么名字的(只是你不知道它的相關信息)。如果你要判斷比如你說的以hbc*開頭的一類文件,最好就是使用ls命令或者find命令來作。你可以參考一下,下面的小測試。
mike >>> ls -d ??? 12-04-20 23:15
acp/ apc/ scl tmp/ xmy/
mike >>> test -d x?? 12-04-20 23:15
mike >>> echo $? 12-04-20 23:16
0
mike >>> test -d x* 12-04-20 23:16
test: too many arguments
使用find命令能很好查找已hbc開頭的文件或者目錄,但是它不能判斷有沒有這樣的文件,因為你不能通過find的命令執行狀態來判斷是否有這樣的文件,但是可以把find的輸出導向到一個文件,從而對文件進行判斷。如下:
mike >>> find ./ -type d -name "FUK*" -print 12-04-20 23:24
mike >>> echo $? 12-04-20 23:24
0
首先:-f判斷是不是文件; -d判斷是不是目錄;-e判斷文件/目錄是否存在;-s判斷文件長度是否不為0,當-s后面跟目錄是,總是返回真
在Linux中寫腳本的時候,總免不了需要判斷文件是否存在、文件內容是否為空等存在,而這些操作都可以用 test 指令來實現,通過 man test 指令可以查看關于test指令的手冊,手冊中有如下說明:
在shell中通過test指令測試文件是否為空的示例腳本如下:
在shell中,test指令還有另外一種寫法,上面的腳本和下面的腳本是等價的:
因shell還不是很熟練,所以做此筆記,方便查看。
#!/bin/sh
myPath="/var/log/買粉絲d/"
myFile="/var/log/買粉絲d/access.log"
#這里的-x參數判斷$myPath是否存在并且是否具有可執行權限
if;then
mkdir"$myPath"
fi
#這里的-d參數判斷$myPath是否存在
if;then
mkdir"$myPath"
fi
#這里的-f參數判斷$myFile是否存在
if;then
touch"$myFile"
fi
#其他參數還有-n,-n是判斷一個變量是否是否有值
if;then
echo"$myVarisempty"
exit0
fi
#兩個變量判斷是否相等
if;then
echo'$var1eq$var2'
else
echo'$var1noteq$var2'
fi
========================================
shell判斷語句
流程控制"if"表達式如果條件為真則執行then后面的部分:if....;then
....
elif....;then
....
else
....
fi
大多數情況下,可以使用測試命令來對條件進行測試。比如可以比較字符串、判斷文件是否存在及是否可讀等等?通常用""來表示條件測試。注意這里的空格很重要。要確保方括號的空格。
:判斷是否是一個文件
:判斷/bin/ls是否存在并有可執行權限
:判斷$var變量是否有值
:判斷$a和$b是否相等-rfile用戶可讀為真
-wfile用戶可寫為真
-xfile用戶可執行為真
-ffile文件為正規文件為真
-dfile文件為目錄為真
-cfile文件為字符特殊文件為真
-bfile文件為塊特殊文件為真
-sfile文件大小非0時為真
-tfile當文件描述符(默認為1)指定的設備為終端時為真
#########################################################
含條件選擇的shell腳本
對于不含變量的任務簡單shell腳本一般能勝任。但在執行一些決策任務時,就需要包含if/then的條件判斷了。shell腳本編程支持此類運算,
包括比較運算、判斷文件是否存在等。基本的if條件命令選項有:-eq—比較兩個參數是否相等(例如,if)
-ne—比較兩個參數是否不相等
-lt—參數1是否小于參數2
-le—參數1是否小于等于參數2
-gt—參數1是否大于參數2
-ge—參數1是否大于等于參數2
-f—檢查某文件是否存在(例如,if)
-d—檢查目錄是否存在
幾乎所有的判斷都可以用這些比較運算符實現。腳本中常用-f命令選項在執行某一文件之前檢查它是否存在。##################################################################判斷文件是否存在
#!/bin/sh
today=`date-dyesterday+%y%m%d`
file="apache_$today.tar.gz"
cd/home/chenshuo/shell
if;then
echo"OK"
else
echo"error$file">error.log
mail-s"failbackupfromtest"linuxcy@126.買粉絲fi
如果FTP上的文件很大,獲取文件會很費時。應該可以不用獲取直接判斷的,下面供借鑒:
#!/bin/bash
server=127.0.0.1 #改為你自己的FTP服務器IP
user=root #修改為你自己的FTP登錄用戶名
password=root #修改為你自己的FTP用戶密碼
errlog=./err.log #用于記錄FTP錯誤
ftpCheckFile()
{
ftp -n -i $server <<EOF
USER $user
PASS $password
ls $1
bye
EOF
}
rm -f $errlog
ftpCheckFile $1 >/dev/null 2>$errlog
bytes=`wc -c $errlog | awk '{ print $1}'`
if [ $bytes -eq 0 ]; then
echo "$1 - Exist!"
else
echo "$1 - Not exist!"
fi
用的時候在腳本名后跟一個參數,就是你要判斷的文件名或路徑名。
思路:如果文件或路徑不存在,FTP中的ls命令會執行錯誤,從而在錯誤日志err.log中有記錄。
通過解析該錯誤日志的內容,可以得知文件或目錄是否存在。
我這里暫時沒有環境試驗,所以沒法得知錯誤日志的格式,只能暫且通過判斷日志字節大小是否為0來看是否發生了錯誤,而無法確定具體錯誤種類。