我已經嘗試了所有可能的組合來使這個 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