首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >脚本作为命令检测变量

脚本作为命令检测变量
EN

Stack Overflow用户
提问于 2015-02-27 12:14:21
回答 2查看 145关注 0票数 0

我正在尝试编写一个shell脚本,在其中我接受来自用户的用户名,并检查系统中是否存在该特定用户。如果是,那么更改密码,否则会显示一个错误。在这个阶段,我只是检查输入的用户名是否存在,并相应地显示一条消息。

这是我写的代码:

代码语言:javascript
运行
复制
#!/bin/bash

echo "Enter the username whose password needs to be reset: "
read UNAME
echo "You want to reset password for $uname"

awk -F':' '{print $1}' /etc/passwd > userlist.txt

FLAG = 0

for LINE in $(cat userlist.txt)
do
if [ "$UNAME" == "$LINE" ]
then
    FLAG = 1
    break
else
    FLAG = 0
fi
done

if[ "$FLAG" == 0 ]
then
    echo "User $UNAME does not exist"
else
    echo "Password for $UNAME can be reset"
fi

这里的问题是,由于某种原因,bash将我的FLAG变量作为命令处理。

这是输出:

代码语言:javascript
运行
复制
Enter the username whose password needs to be reset: 
abc
You want to reset password for 
./chpwd.sh: line 9: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
./chpwd.sh: line 18: FLAG: command not found
Password for abc can be reset

正如你们所看到的,它挂在FLAG变量上。我不知道为什么!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-27 12:20:44

shell中的变量是用语法var=value (或者更好的var="value")设置的。也就是说,您不能在=周围有空格。这就是为什么你的剧本在抱怨:

代码语言:javascript
运行
复制
FLAG = 0

是这样说的:使用参数FLAG0运行命令=

所以你想写的是:

代码语言:javascript
运行
复制
FLAG=0

另外:注释读取文件可以改进。发自:

代码语言:javascript
运行
复制
for LINE in $(cat userlist.txt)
do
...
done

代码语言:javascript
运行
复制
while IFS= read LINE
do
...
done < userlist.txt

其他事情:

代码语言:javascript
运行
复制
if[ "$FLAG" == 0 ]

需要[]周围的空间

代码语言:javascript
运行
复制
if [ "$FLAG" == 0 ]

实际上,如果要进行整数比较,则必须使用-eq来查看值是否相同:

代码语言:javascript
运行
复制
if [ "$FLAG" -eq 0 ]
票数 1
EN

Stack Overflow用户

发布于 2015-02-27 12:41:57

您可以使用简单的脚本查找特定的用户名是否存在。

代码语言:javascript
运行
复制
    #!/bin/bash
    Read -p "enter ur username" uid
    Grep ^$uid /etc/passwd
    [ $? != 0 ] && eche -e "/033[31m i can see ur user!" || echo -e "/033[33m u can chang pass "

加上,您可以在读/etc/passwd时使用:

代码语言:javascript
运行
复制
Read -p "enter uid for check " uid
IFS=":"
While read UID REST 
do
[ $UID -eq $uid ] && echo " user found you can change pass " break
Done </etc/passwd
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28764886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档