我是Linux/Unix的初学者。这是我的任务,太长了,不能在这里发布所有东西:https://imgur.com/a/kqxssd1
Here是我有的逻辑:
此代码将检查用户是否输入了参数。我不知道该把什么放在其他地方。我们从未讨论过我从其他用户那里学到的哪个语句,因此它不会被使用。只是基本的命令--这不是一个超级高级的任务。
if [ $# -ne 1 ]; then
echo Please enter a single, valid user id:
read userid
else
userid=$1
**what goes here?**
fi
要显示用户的全名(即),这是我编写和测试的代码:
grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'
Determine用户是否登录:
如果用户未登录(将返回退出代码1):who | grep $userid
grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'
和echo is NOT currently logged on
then end脚本如果用户登录(将返回退出代码0):who | grep $userid
grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'
和echo is currently logged on
<#>then end脚本,代码为0。Determining用户是否有效:
如果用户无效(将返回退出代码1):grep $userid /etc/passwd
echo "The user you entered, $userid is not a valid user on this system."
如果用户有效(将返回退出代码0):grep $userid /etc/passwd
我怎么写这个剧本?完整的结构是什么?我被困在结构/装置上了。
发布于 2020-04-10 20:27:51
由于这看起来像是一项任务,我只会给您一些工具和一些提示:
$1
(脚本的第一个参数)将为空。您可以使用[[ -z $1 ]]
对此进行测试。如果要显示太多参数的错误,请使用[[ $# -eq 1 ]]
测试参数的数量(单个参数为真)。gentent passwd "$username"
命令可用于获取用户$username
的passwd
条目。如果用户不存在,该命令将在非零退出状态下失败。这意味着您可以使用if ! getent passwd "$username" >/dev/null; then ...; fi
对不存在的用户$username
作出反应。passwd
条目的第五个字段通常包含用户的全名(实际上不能保证它将以“姓氏”的形式出现)。该条目在结尾处可能有额外的逗号,您必须删除。您可以使用getent passwd "$username"
在第五个字段中解析cut -d: -f 5
的输出,然后用name=${name%%,*}
从第一个逗号中删除。在某些系统中,用户的全名可能包含一个&
字符。在这些系统上,这个&
字符应该替换为用户名(以便用户operator
的名称System &
变为System operator
)。我不确定Linux通常会这样做,但这可以用name=${name/&/$username}
来完成。who
实用程序输出当前登录的用户列表。若要将$username
与此匹配,请使用grep -e "^$username\>"
。\>
与单词的结尾相匹配,因此在查找或anton
时不匹配antony
。grep -q
在if
语句中很有用。这遵循代码结构:
if
语句。if
语句。if
语句,可能带有一个else
分支。我在这个脚本中没有看到一个循环,所以它将是许多if
-statements和变量赋值。
https://unix.stackexchange.com/questions/579032
复制相似问题