2014-02-24 64 views
0

我目前正在編寫一個腳本,將允許我通過用戶輸入添加組。我在腳本部分用戶輸入組名,並將其與/ etc/group進行比較,並讓用戶知道是否需要添加組名。我已經測試了這個對一個我知道的事實不在我的系統上,它只讀取我的循環中的第一個語句。有人能告訴我我哪裏出錯了嗎?String Bash腳本編寫,如果然後語句失敗

#!/bin/bash 
echo "This script will allow you to enter Groups and Users needed for new builds" 
echo 
echo 
echo 
echo 

# Setting Variables for Group Section 
Group=`cat /etc/group |grep "$group"` 

echo -n "Please enter the group name that you would like to search for..press [ENTER] when done: " # Request User input to obtain group name 
read group 
echo "Searching /etc/group to see if the group "$group" exists." # Checking to see if the group exists 

if [ "$group" != "$Group" ]; then 
     echo "The group already exist. Nothing more to do buddy." 
else 
     echo "We gotta add this one fella..carry on." 
+0

除了不使用'getent'? –

+0

我想驗證該組當前不存在/ etc/group。 – Drea

+1

現在,您正在嘗試在讀取組名稱之前查找組名。當然**會失敗。 –

回答

0

這裏就是你要做的:

  1. 搜索組名
  2. 輸入組名來搜索

可悲的是,你不能搜索的組名在你輸入之前,因爲這會違反我們所知道的因果關係和時空定律。嘗試搜索你知道你的搜索內容,而不是後:

echo -n "Please enter the group name that you would like to search for..press [ENTER] when done: " # Request User input to obtain group name 
read group 

if cat /etc/group | grep -q "^$group:" 
then 
    echo "The group already exist. Nothing more to do buddy." 
fi 
+2

'grep -q「^ $ group:」

1

如果你是在Linux上,因而具有getent可供選擇:

printf "Group to search for: " 
read -r group 
if getent group "$group" >/dev/null 2>&1; then 
    echo "$group exists" 
else 
    echo "$group does not exist" 
fi 

使用getent使用標準C庫進行目錄查找。因此,不僅適用於/etc/passwd,/etc/group等,還適用於Active Directory,LDAP,NIS,YP等目錄服務。

+0

+1:之前從未聽說過「getent」。在google上查了一下,發現[this](http://www.commandlinefu.com/commands/using/getent)。有趣的... –