2013-04-01 23 views
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 명령의 이름 옵션이 사용 불가능해야합니다.bash 찾기 매개 변수

나는 위와 비슷한 것을 만들었지 만, 변수 이름에 아무 것도 들어 있지 않으면 (사용자가 입력하지 않은 것) doestn이 작동합니다. 나는 계속 오류가 발생한다 : find : 경로 앞에 expression이 있어야한다 : 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 '

+0

이'if [-z $ name]'은 반드시 [if [-z "$ name"]'이면됩니다. 'test' (일명'[')는 누락 된 인수를 보완 할 수 있습니다. –

+0

'tablica [0] = "- name"사용; tablica [1] = "$ name"; ', 또는 훨씬 더 편리하게,'tablica + = (- name "$ name")'. –

답변

0

당신은 매개 변수의 배열을 구축 할 수 있습니다 :

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

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

이 접근법의 이점은 공백을 올바르게 처리한다는 것입니다. 코드 삽입을 허용하지 않습니다.

+0

하지만 한 번 제대로 이름을 설정하면 example.txt라고 말한 다음 프로그램을 종료하지 않고 1을 else.txt로 변경하면 제대로 작동합니다. 나는 그것이 새로운 요소를 배열에 추가 할 것이므로 두 개의 동일한 요소를 가질 것이다. -name example.txt와 -name else.txt –

+0

실제로 이것을 실행하고자 할 때 "5"로하면된다. 변수를 읽고 사용자가 원하는만큼 수정 한 후 find 명령을 실행하십시오. –

관련 문제