bash 腳本編寫問題

bash 腳本編寫問題

我對 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

您不能在-einside中使用 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 周圍使用「」將確保名稱中帶有空格的檔案不會執行任何意外操作。

相關內容