출력은 " 13test.sh: line 5: [: Missing `]' "이지만 괄호를 추가하면 오류가 중첩된 if 문으로 전달됩니다.

출력은 " 13test.sh: line 5: [: Missing `]' "이지만 괄호를 추가하면 오류가 중첩된 if 문으로 전달됩니다.

목표는 사용자 이름 행을 가져오고, 검색한 사람과 일치하면 w 명령을 실행하는 것입니다. 그렇지 않으면 해당 사람은 온라인 상태가 아닙니다.

read -p "Enter User ID's: " str

for i in [ $str ]; 
do
    if [ who -u | grep -q $i ];
    then
        echo $i
        w -u $i 
    else
        echo $i
        echo user is not logged in
done 

답변1

tl;dr for id in $str대신 for i in [ $str ];if who -u | grep -q "$id"대신 사용하십시오 if [ who -u | grep -q $i ];.

  • [ … ]안에 있는 것은조건식, 이는 명령과 다릅니다.
  • [ … ]아니요인쇄따라서 for루프로 래핑하면 루프에는 사용할 것이 없습니다 $str.
  • if COMMAND명령이 성공하면 무언가를 실행하는 정식 방법입니다.
  • 유지 관리상의 이유로 단일 문자 변수는 좋지 않습니다™.

관련 정보