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 コマンドのように機能するスクリプトを作成する必要がありますが、問題が発生しました。ユーザーが名前などを入力しない場合、find コマンドで name オプションを無効にする必要があります。

上記のようなものを思いつきましたが、変数名に何も含まれていない場合(ユーザーが何も入力しなかった場合)は機能しません。エラーが発生し続けます: 検索: パスは式の前にある必要があります: BASH ....

正直なところ、2 ^ 4 IF を使用して、ユーザーが選択した指定されたオプションのみを使用して検索を実行する代わりに、それを機能させる方法がわかりません。

簡単にする方法はありますか?

編集:今私はそれを次のように変更しました:

#!/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

しかし、別のエラー:

find: 未知の述語 `-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 に答える