Linux shell腳本中的另一個新手。如果文件名(只是名稱)比較shell腳本
基本上我有一個文件夾中有很多文件。但是,我需要得到僅與".log"
下面結束我的版本,它不工作
#!/bin/sh
for i in *;
do
if [ "$i" == "$i".log ]; then
echo $i;
fi
done
可能有人請幫助我在這個文件?非常感謝 !
Linux shell腳本中的另一個新手。如果文件名(只是名稱)比較shell腳本
基本上我有一個文件夾中有很多文件。但是,我需要得到僅與".log"
下面結束我的版本,它不工作
#!/bin/sh
for i in *;
do
if [ "$i" == "$i".log ]; then
echo $i;
fi
done
可能有人請幫助我在這個文件?非常感謝 !
任何你不能這樣做的理由不能這樣做嗎?
for fname in *.log
do
echo $fname
done
嗨John3136。謝謝您的幫助。有沒有一種方法可以使用if語句來實現這一點? – NewLands
@ user2164400:是的,有些方法可以使用if語句來做到這一點,但是如果你想要的是循環所有'* .log'文件,那完全沒有意義。如果你真的想做其他事情,我建議接受這個答案,並提出一個新問題來解釋你想要達到的目標以及你曾經嘗試過的 - 你會以這種方式得到更有用的答案。 –
只是爲了記錄,用if語句做這件事的一種方法是'if [-z「$ {f %% * .log}」];然後 ...; fi'。 –
@ John3136有最簡單的答案。隨着bash
,你可以使用一個事實,即==
內[[ ... ]]
實際上是一個模式匹配運營商,而不是一個平等的運營商:
#!/bin/bash
for f in *; do
if [[ "$f" == *.log ]]; then
echo "$f"
fi
done
見http://www.gnu.org/software/bash/manual/bashref.html#Conditional-Constructs
謝謝格倫。這有助於很多.. – NewLands
暫且不說,在POSIX外殼字符串比較操作符是' =',而不是'==',你的'if'語句的條件查找與名稱相同的文件名,並附加一個'.log'。這顯然永遠不會是這樣,因爲每個文件名在附加'.log'後都會有所不同。 –