2017-08-10 33 views
0

我在编写脚本的最初阶段。 (我刚刚完成Linux LPI基础知识) 我有以下挑战::语法错误:循环变量不适用

创建一个新组。每个组必须有一个唯一的名称。脚本必须检查以确保系统上不存在重复的组名。如果发现重复,则需要报告错误,并且管理员必须尝试另一个组名称。

这里是我的 “脚本”:

#!/bin/bash                  

echo "Please enter a group name"             
read gname                  

for $gname in /etc/group; do              
echo "Please enter another group name"           
read gname                  
done                    

groupadd $gname                 
echo "Group $gname has been created" 

这是我收到的错误。

Please enter a group name              
alexandru                  
test.sh: 6: test.sh: Syntax error: Bad for loop variable 

回答

-2

我做到了! 谢谢你们! (劫Welivitigoda和Rawkode)

!/斌/庆典

回声 “请输入组名”
读的gname
GROUPADD $的gname
而[$? != 0];

回声 “输入新的组名”
读的gname
GROUPADD $的gname

-2

您可能需要遍历的/etc/group内容,请尝试以下,

for $gname in $(cat /etc/group); do

在不同的音符,这是更好地检查新的组名称是否也是现有团队名字。

+0

感谢您的回答!不幸的是,我仍然收到相同的错误 –

+1

由坏,对不起,应该是, 'for gname in $(cat/etc/group); do' 注意,不需要“$”在'for' –

+0

现在它给了我下面的输出:请输入组名 根 请输入另一组名 请输入另一组名称 - 很多次(我思它检查每一行,并给我这个输出,因为我的变量是一个字母) –

0

不要试图解析/etc/group,而是依靠groupadd来正确执行它的工作。

当您使用groupadd和组名已存在时,它将以非零代码退出。

if [[ $? != 0 ]]; then echo "Error, group already exists" fi

所以循环,直到你得到一个正确的组:

#!/usr/bin/env bash 

echo "Enter group name: " 
read group 

until groupadd $group 
do 
    read group 
done 

echo "${group} created" 
+1

Rawkode非常感谢你的提示!(你很awsome)这里是我的脚本:!/ bin/bash echo“请输入组名” 阅读gname groupadd $ gname if [$? != 0]; 然后 回声“错误组媒体链接存在” 网络 它的伟大工程,但它应该再问我另一个名字,并尝试之一,也是 –

+0

我添加了一个样品环为您 – Rawkode

+0

@EduardPetru你或许应该纪念这个答案正确的,基于你的解决方案。谢谢 – Rawkode