
我對 bash 腳本編寫很糟糕,需要以下方面的幫助:
#!/bin/bash
if [ -e Pretty* ];then
ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 /home/xbmc/TV/Pretty_Little_Liars/ Pretty*
else
echo "No new folders"
fi
find -depth -type d -empty -exec rmdir {} \;
這裡的問題是ncftpput 行..如果我只是做一個簡單的[ echo "working" ] ,一切都好,但是當我嘗試ncftpput-line 時它只會給我[ line 5: [: 太多參數]
ncftpput 命令單獨工作正常..
有任何想法嗎?
答案1
您不能在-e
inside中使用 globbing []
,因為它可能會傳回多個結果,這會為您帶來太多參數錯誤。
你可以試試:
shopt -s nullglob
if [[ -n "$(echo Pretty*)" ]]
或者
if [[ "$(echo Pretty*)" != "Pretty*" ]]
另外,使用縮排、空格和續行可以讓程式碼更具可讀性:
#!/bin/bash
shopt -s nullglob
if [[ -n "$(echo Pretty*)" ]]; then
ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 \
/home/xbmc/TV/Pretty_Little_Liars/ Pretty*
else
echo "No new folders"
fi
find -depth -type d -empty -exec rmdir {} \;
答案2
嘗試一下。
#!/bin/bash -x
if [ -e "Pretty*" ];then
`ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 /home/xbmc/TV/Pretty_Little_Liars/ Pretty*`
else
echo "No new folders"
fi
find -depth -type d -empty -exec rmdir {} \;
答案3
好吧,如果它抱怨太多的參數,用 for 來打破它。
#!/bin/bash
if [ -e Pretty* ];then
for FILE in Pretty*
do
ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 /home/xbmc/TV/Pretty_Little_Liars/ "$FILE"
done
else
echo "No new folders"
fi
find -depth -type d -empty -exec rmdir {} \;
在 $FILE 周圍使用「」將確保名稱中帶有空格的檔案不會執行任何意外操作。