linux - 无法从 Bash 中的命令填充变量

标签 linux bash variables command opensuse

我是 bash 脚本的新手,我正在编写一个脚本,用户可以在其中输入用户名并从/etc/passwd 中获取相关信息的列表。不幸的是,我似乎无法通过命令填充变量。我收到的错误消息表明未输入 if 语句,但我不确定原因。

脚本目前看起来像这样:

#!/bin/bash

#readifs

FILE=/etc/passwd

read -p "Enter a username > " user_name

file_info=$(grep "^$user_name:" $FILE)

if [ -n "$file_info" ]; then
     IFS=":" read user pw uid gid name home shell <<< "$file_info"
     echo "User = '$user'"
     echo "UID = '$UID'"
     echo "GID = '$GID'"
     echo "Full Name = '$name'"
     echo "Shell = '$shell'"
else
     echo "No such user '$user_name'" > &2
     exit 1
fi

当我运行它时,使用有效的用户名,我得到以下两行:

readifs.sh: line 20: syntax error near unexpected token `&'
readifs.sh: line 20: `  echo "No such user '$user_name'" > &2'

我很确定我遗漏了一些明显的东西,或者做了一些 bash 不允许但我太新无法理解的事情。谁能指出并更正我脚本中的错误?

最佳答案

感谢 Charles Duffy 不仅对这个脚本,而且对 bash 脚本和 Stack Overflow 的所有重要反馈。

我能够根据需要修复脚本。我从 file_info 行中删除了 ^ 和 : ,这阻止了 grep 命令找到我想要的行。我还将$UID和$GID重命名为使用小写字母,并删除了“>&2”中的空格。

再次感谢您的协助。

关于linux - 无法从 Bash 中的命令填充变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48649802/

相关文章:

linux - 与物理内存地址处理相关的MMU

linux - "source"命令的参数有什么作用?

variables - R中变量名的向量

linux - 在 bash 中解析变量

linux - `echo` (shell bash) 发送整数值,而不仅仅是字符和字符串。是否可以?

JavaScript 变量更新

regex - 如何在 R 中分配变量?

windows - 使用 ietd 从 iSCSI 目标启动的 Windows 的故障转移

linux - 在 bash 中的并行进程之间添加等待

linux - 用双引号括起来的双反斜杠替换正斜杠