2013-11-22 3 views
-4

내가해야 할 일은 사용자가 사용자의 홈 디렉토리에있는 journal-file 파일에 대한 쓰기 권한을 가지고 있는지 확인하는 스크립트를 편집하는 것입니다. 저널 파일이 있고 사용자가 파일에 대한 쓰기 권한을 가지고 있지 않으면 스크립트는 적절한 조치를 취해야합니다. 여기내 bash 스크립트에 어떤 문제가 있습니까?

내가 지금까지 쓴 것입니다 :

if [ -w $HOME/journal-file ] 
     then 
      file=$HOME/journal-file 
      date >> file 
      echo -n "Enter name of person or group: " 
      read name 
      echo "$name" >> $file 
      echo >> $file 
      cat >> $file 
      echo "--------------------------------" >> $file 
      echo >> $file 
      exit 1 
     else 
      echo "You do not have write permission." 
      exit 1 
    fi 

내가 입력 할 사람/그룹의 이름을 나에게 메시지를 표시 스크립트를 실행하지만 Enter 키를 누릅니다 후 아무 일도 발생하지

. 그냥 거기에 앉아 계속해서 물건을 입력 할 수있게하고 그 부분을 지나치지 않게합니다. 왜이 일을하는거야?

+1

정말로 코드를 제출하고 무엇이 잘못되었는지 물어 보지 마십시오. –

답변

1

내가이 부분을 파일에 표준 입력에서 cat >> $file 복사 모든 것을 생각 $file

1

cat >> $file 

cat가 (사용자가 입력 한대로 예) 표준 입력으로부터 입력을 연결되어이 줄을합니다. 어쩌면 Ctrl + D (파일 끝)를 숨기면 스크립트를 계속 사용할 수 있습니다.

+0

아니요 '진단'은 정확하지만 진단은 정확합니다. –

3

문 :

cat >>$file 

표준 입력에서 파일을 읽고 쓸 것입니다. 즉, CTRL-D와 같은 파일의 끝을 알릴 때까지 기다릴 것입니다. 명령 행에서 cat을 타이핑하는 것과 실제로 아무 것도 입력하지 않고 파일의 끝을 알릴 때까지 기다리지 않는 것만 큼 다르지 않습니다.

출력 파일에 다른 파일을 추가하려는 경우 이름을 지정해야합니다 (예 : cat $HOME/myfile.txt >>$file).

빈 줄을 가져 오려면 cat이 아닌 echo (예 : echo >>$file)을 사용하십시오. 즉 (작업 디렉토리에서) file라는 파일을 만들려고하기 때문에

date >> file 

:

는 또한 다른 문제, 최초의 존재의 몇 가지있다. 대신 $file을 사용하십시오.

두 번째 시도는 수행하려는 작업이 성공한 경우 1의 종료 코드입니다. 그것은 지금 문제가되지 않을 수도 있지만, 나중에 이것을 사용하는 누군가는 왜 그것이 항상 실패를 나타내는 것으로 생각하는지 궁금해 할 것입니다.

솔직히 말해서, 나는 실제로 if ... then return else ... 구조의 큰 팬이 아닙니다. 나는 그 훨씬 더 읽기 쉽고 유지 보수가 믿을

file=${HOME}/journal-file 
if [[ ! -w ${file} ]] ; then 
    echo "You do not have write permission." 
    exit 1 
fi 

echo -n "Enter name of person or group: " 
read name 
(
    date 
    echo "$name" 
    echo 
    echo "--------------------------------" 
    echo 
) >>${file} 

: 나는 그런 덜 들여 쓰기 및 출력 재 지정의 더 나은 그룹,와 르파 선호합니다.

0

1) 당신은 더 나은 파일이 존재하는지 여부를 먼저 확인 : 파일에 대해 수행 할 무엇 이건

[[ -e $HOME/journal-file ]] || \ 
    { echo "$HOME/journal-file does not exist"; exit 1 } 

2) 돼 변화 "고양이 >> $ 파일을".이것은 스크립트 실행을 차단하는 명령입니다.

관련 문제