UNIX 구문(및 기타 오류) [닫기]

UNIX 구문(및 기타 오류) [닫기]

else이 스크립트를 실행하면 49행에서만 구문 오류가 발생합니다. 누구든지 이유를 지적할 수 있습니까? 내 스크립트를 실행할 수 없습니다. 내 삭제 스크립트 코드와 내 스크립트에 포함되어야 하는 내용은 다음과 같습니다.

  • 스크립트는 rm 명령을 테스트하고 rm 명령과 동일한 오류 메시지를 표시해야 합니다.

  • 스크립트 이름이 제거되었습니다. 스크립트에 "삭제된" 휴지통 디렉터리를 만듭니다.

  • $HOME에 .restore.info라는 숨겨진 파일을 만듭니다. 파일의 각 줄에는 삭제된 디렉터리에 있는 파일 이름, 콜론, 파일의 원래 전체 경로가 포함됩니다.

  • 디렉터리에서 파일 이름 형식 "filename_inode"를 삭제합니다.

  • 스크립트가 여러 파일과 와일드카드를 삭제할 수 있는지 확인하세요.

  • -i(대화형) 및 -v(상세)에 대한 명령줄 인수를 테스트합니다.

  1 #/bin/bash
  2
  3 function directory(){
  4 if [ ! -d ~/deleted }
  5     then
  6         mkdir ~/deleted
  7 fi
  8 if [ ! -f ~/.restore.info ]
  9     then
 10         touch ~/.restore.info
 11 fi
 12 }
 13
 14 function movefile(){
 15 mv $1 ~/deleted/$1
 16 echo "file moved to recycle bin"
 17 }
 18
 19 function error_conditions(){
 20 #prints error messages and checks if file is in project directory
 21 if [ ! -f ~/project ]
 22     then
 23         echo "cannot remove $filename: no such file or directory"
 24 elif [ -d ~/project ]
 25         then
 26             echo "cannot remove $filename: is a directory"
 27 else
 28     echo "missing operand"
 29 fi
 30 }
 31
 32 function delete_file(){
 33 #gets inode for filename
 34 inode=$(stat -c%i $filename)
 35 filename=$1
 36 pwd=$(readlink -e$filename)
 37 if $interactive
 38     then
 39         if [ $verbose = true ]; then
 40             read -p "Are you sure you want to delete $filename?" i_input
 41                 if [ $i_input == "y" ] || [ $i_input == "Y" }  
 42                     then
 43                 mv $filename ~/delete/${filename}_inode
 44                 echo ${filename}_$inode:$pwd>>~/.restore.info
 45                 echo "$filename has been deleted"
 46                     else
 47                     echo "Nothing has been deleted"
 48                 fi
 49         else
 50             read -p "Are you sure you want to delete $filename?" i_input
 51             if [$i_input == "y" ] || [ $i_input == "Y" ];
 52                 then
 53                 mv $filename ~/deleted/${filename}_$inode
 54                 echo ${filename}_$inode:$pwd>>~/.restore.info
 55                     else
 56                     echo Aborted
 57             fi
 58         fi
 59     elif $verbose
 60         then
 61             mv $filename ~/deleted/${filename}_inode
 62             echo ${filename}_$inode:$inode:pwd>>~/.restore.info
 63             echo "$filename has been deleted."
 64     else
 65         mv $filename ~/deleted/${filename}_$inode
 66         echo ${filename}_$inode:$pwd>>~/.restore.info
 67         echo Executed
 68 fi
 69 }
 70 interactive=false
 71 verbose=false
 72 recursive=false
 73 while getopts iv option
 74 do
 75     case $option in
 76         i) interactive=true;;
 77         v) verbose=true;;
 78     esac
 79 done
 80 shift $[OPTIND-1]
 81 for i in $*
 82     do
 83 filename=$i
 84 baseline=$(basename $i)
 85 if [ "$i" == "" ];
 86     then
 87         echo "No filename provided"
 88     elif [ -d $filename ];
 89         then
 90             if [ ! $recursive = true ];
 91                 then
 92                     echo "Directory name provided, please provide a file"
 93             fi
 94     elif [ ! -f $filename ];
 95         then
 96             echo "File does not exist"
 97     elif [ "$basefule" == "safe_rm" ]
 98         then
 99             echo "Attempting to delete safe_rm"
100     else
101         delete_file $filename
102     fi
103     done
104
105 #################################M A I N###############################
106 directory
107 error_conditions $*
108 delete_file $*
109 move_file $r

답변1

41행에 잘못된 닫는 괄호가 있습니다.

관련 정보