输出为“ 13test.sh: line 5: [: Missing `]' ”,但添加括号会将错误定向到嵌套的 if 语句

输出为“ 13test.sh: line 5: [: Missing `]' ”,但添加括号会将错误定向到嵌套的 if 语句

目标是获取用户名行,如果它与 who 搜索匹配,则对其运行 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是命令成功时运行某些内容的规范方式。
  • 出于可维护性的原因,单字母变量是一个坏主意™。

相关内容