bash - 將使用者變數讀入 bash 腳本 grep

bash - 將使用者變數讀入 bash 腳本 grep

我已經嘗試了所有可能的組合來使這個 bash 腳本正常工作。它是一個更大腳本的一部分,它基本上會提示輸入使用者名稱(以檢查它是否存在)並返回適當的回應:

#! /bin/bash
# Script to see if User exists

clear
echo -n "Enter user to check: "
read $uzer

grep -c '^${uzer}:' /etc/passwd

if [ $? -eq 0 ]; then
  echo "User does exist :)"
else
  echo "No such user"
fi

在終端機中,以下工作正常:

grep -c '^devuser1:' /etc/passwd
RETURNS: 1
grep -c '^devuser1234:' /etc/passwd
RETURNS: 0

我嘗試了許多將讀取變數傳遞給的組合,'^${uzer}:'但沒有任何樂趣。還有什麼想法我還可以嘗試嗎?

答案1

-c表示您想知道該使用者進入的次數/etc/passwd$?而是退出代碼。這些是不同的,因為次數列印在標準輸出上。用於$()將標準輸出放入變數中

第二個問題:所有變量,如$uzer單引號中的變量,都不會被它們的值取代。使用雙引號。

number=$(grep -c "^${uzer}:" /etc/passwd)
if [ $number -gt 0 ]; then
  echo "User does exist :)"
else
  echo "No such user"
fi

答案2

你需要grep -q。如果您不區分「0」和「其他」以外的更多退出程式碼,則無需分隔 grep 和 if:

if grep -q "^${uzer}:" /etc/passwd; then
  echo "User does exist :)"
else
  echo "No such user"
fi

相關內容