![출력은 " 13test.sh: line 5: [: Missing `]' "이지만 괄호를 추가하면 오류가 중첩된 if 문으로 전달됩니다.](https://linux55.com/image/154018/%EC%B6%9C%EB%A0%A5%EC%9D%80%20%22%2013test.sh%3A%20line%205%3A%20%5B%3A%20Missing%20%60%5D'%20%22%EC%9D%B4%EC%A7%80%EB%A7%8C%20%EA%B4%84%ED%98%B8%EB%A5%BC%20%EC%B6%94%EA%B0%80%ED%95%98%EB%A9%B4%20%EC%98%A4%EB%A5%98%EA%B0%80%20%EC%A4%91%EC%B2%A9%EB%90%9C%20if%20%EB%AC%B8%EC%9C%BC%EB%A1%9C%20%EC%A0%84%EB%8B%AC%EB%90%A9%EB%8B%88%EB%8B%A4..png)
목표는 사용자 이름 행을 가져오고, 검색한 사람과 일치하면 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
명령이 성공하면 무언가를 실행하는 정식 방법입니다.- 유지 관리상의 이유로 단일 문자 변수는 좋지 않습니다™.