意外令牌`elif'附近的语法错误 - 已经读过其他帖子

时间:2017-03-13 20:43:08

标签: bash if-statement syntax-error whitespace

首先,我已经查看过此处列出的其他评论,但不幸的是,所提供的帮助都没有解决我的问题。

我在CentOS 7中作为我的环境工作,我正在将一些错误处理编码到我的添加用户脚本中。

#! /bin/bash
echo -n "Enter username: "
read -r username
/bin/egrep -i "^${username}:" /etc/passwd
if [ $? -eq 0 ]
echo "User $username already exists. Please check the username and try again."
elif [ $? eq 1 ]
echo "User $username does not exist. Please proceed with account creation."
then
adduser "$username"
echo -n "Enter password: "
read -r -s password
echo $username:$password | chpasswd
touch /etc/sudoers.d/sugroup
chmod 0440 /etc/sudoers.d/sugroup
echo "$username ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/sugroup
else
echo "Error encountered."
fi

当我去测试时,我收到以下错误消息:

./testscript-error.sh line 7: syntax error near unexpected token 'elif'
./testscript-error.sh line 7: elif [ $? eq 1 ]

我试过了:

elif [ $? eq 1 ]**;**
echo "User $username does not exist. Please proceed with account creation."
then
adduser "$username"
echo -n "Enter password: "
read -r -s password
echo $username:$password | chpasswd
touch /etc/sudoers.d/sugroup
chmod 0440 /etc/sudoers.d/sugroup
echo "$username ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/sugroup**;**

我也试过了:

elif [ $? eq 1 ]
then
echo "User $username does not exist. Please proceed with account creation."
then
adduser "$username"
echo -n "Enter password: "
read -r -s password
echo $username:$password | chpasswd
touch /etc/sudoers.d/sugroup
chmod 0440 /etc/sudoers.d/sugroup
echo "$username ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/sugroup

也有同样的结果。不知道我错过了什么,可以用另一双眼睛。

2 个答案:

答案 0 :(得分:0)

你走了......我希望你能更好地理解语法和用法:

#!/bin/bash

while true; do
    echo -n "Enter username: "
    read -r username
    /bin/egrep -i "^${username}:" /etc/passwd
    if [ $? -eq 0 ]; then
        echo "User $username already exists. Please check the username and try again."
    else
        echo "User $username does not exist. Proceed with account creation."
        break
    fi
done

adduser "$username"
if [ $? -gt 0 ]; then
    echo "Error encountered."
    exit 1
fi

echo -n "Enter password: "
read -r -s password
echo "$username:$password" | chpasswd
if [ $? -gt 0 ]; then
    echo "Error encountered."
    exit 1
fi

touch /etc/sudoers.d/sugroup
chmod 0440 /etc/sudoers.d/sugroup
echo "$username ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/sugroup
if [ $? -gt 0 ]; then
    echo "Error encountered."
    exit 1
fi

答案 1 :(得分:0)

这是完成的工作代码。

#!/bin/bash
#========================================================================================================
# This script allows for account creation on a server                                                   |
# It also performs error handling to ensure that the user doesn't currently exist on the system.        |
# Also provides feedback from the input to verify the entries are correct.                              |
#========================================================================================================
while true; do
    echo -n "Enter username: "
    read -r username
    /bin/egrep -i "^${username}:" /etc/passwd
    if [ $? -eq 0 ]; then
        echo "User $username already exists. Please check the username and try again."
    else
        echo "User $username does not exist. Proceed with account creation."
        break
    fi
done

adduser "$username"
if [ $? -gt 0 ]; then
    echo "Error encountered."
    exit 1
fi

echo -n "Enter password: "
read -r -s password
echo "$username:$password" | chpasswd
echo "Password was succesfully set for $username."
if [ $? -gt 0 ]; then
    echo "Error encountered. There was a problem with your entry. Please re-run the script and try again."
    exit 1
fi

usermod -a -G wheel "$username"
echo "User was succesfully added to the group wheel."
if [ $? -gt 0 ]; then
    echo "Error encountered."
    exit 1
fi
echo "Successfully added $username to the system."