0
#!/bin/bash                                                                                                                                                             
menu=0
dir=""
size=""
name=""
modif=""
while [ $menu -ne 6 ]
do
    echo "1. Name: $name"
    echo "2. Directory $dir"
    echo "3. Last modified: $modif"
    echo "4. Minimum size: $size"
    echo "5. Search"
    echo "6. End"
    read menu
    case "$menu" in
        "1") read name ;;
        "2") read dir ;;
        "3") read modif ;;
        "4") read size;;
        "5") if [ -z $name ]
             then
                 option1=""
             else
                 option1="-name $name"
             fi
            find "$option1";;
        "6") ;;
        *) echo "Wrong number!"
    esac
done

我需要制作一个像 find 命令一样工作的脚本,但是我遇到了一个问题。当用户不输入例如名称时,查找命令应该禁用名称选项。

我想出了上面这样的东西,但是当变量名不包含任何内容时它不起作用(用户没有输入任何内容)。我不断收到错误:查找:路径必须在表达式之前:BASH ....

老实说,我不知道如何使它工作,而不是使用 2^4 IF 并仅使用用户选择的那些指定选项执行 find 。

有没有办法让它变得更容易?

编辑:现在我将其修改为:

#!/bin/bash                                                                                                                                                             
menu=0
dir=""
modif=""
while [ $menu -ne 6 ]
do
    echo "1. Name: $name"
    echo "2. Directory $dir"
    echo "3. Last modified: $modif"
    echo "4. Minimum size: $size"
    echo "5. Search"
    echo "6. End"
    read menu
    case "$menu" in
        "1") 
            read name 
            ;;
        "2") read dir ;;
        "3") read modif ;;
        "4") 
            read size
            ;;
        "5") 
            if [ -z $name ]
        then
            unset tablica[0]
        else    
            tablica[0]="-name $name"
        fi          
        find "${tablica[@]}"
        ;;
    "6") ;;
    *) echo "Wrong number!"
esac
done

但另一个错误:

查找:未知谓词`-name example.txt'

4

1 回答 1

0

您可以构建一个参数数组:

myarray=()
if [[ $size ]]
then
    myarray+=(-size +"$size")
fi

if [[ $name ]]
then
    myarray+=(-name "$name")
fi
...
find "$dir" "${myarray[@]}"

这种方法的好处是它还可以正确处理空格,并且不允许代码注入。

于 2013-04-01T17:42:38.060 回答