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 时,它​​只会给我 [ 第 5 行:[:参数太多 ]

ncftpput 命令单独运行良好..

有任何想法吗?

答案1

您不能在-e内部使用通配符[],因为它可能会返回多个结果,从而导致参数过多的错误。

你可以试试:

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 周围使用“”将确保名称中带有空格的文件不会执行任何意外操作。

相关内容