ฉันต้องการสร้างสคริปต์เพื่อตรวจสอบว่ามีผู้ใช้อยู่หรือไม่ ฉันใช้ตรรกะด้านล่าง:
# getent passwd test > /dev/null 2&>1
# echo $?
0
# getent passwd test1 > /dev/null 2&>1
# echo $?
2
ดังนั้นหากผู้ใช้มีอยู่แล้วเราจะประสบความสำเร็จมิฉะนั้นผู้ใช้จะไม่อยู่ ฉันได้ใส่คำสั่งข้างต้นในสคริปต์ทุบตีดังต่อไปนี้:
#!/bin/bash
getent passwd $1 > /dev/null 2&>1
if [ $? -eq 0 ]; then
echo "yes the user exists"
else
echo "No, the user does not exist"
fi
ตอนนี้สคริปต์ของฉันบอกว่าผู้ใช้คงอยู่ไม่ว่าจะเกิดอะไรขึ้น:
# sh passwd.sh test
yes the user exists
# sh passwd.sh test1
yes the user exists
# sh passwd.sh test2
yes the user exists
เหตุใดเงื่อนไขข้างต้นจึงประเมินว่าเป็นจริงเสมอและกล่าวว่ามีผู้ใช้อยู่หรือไม่
ฉันจะไปไหนผิด
UPDATE:
หลังจากอ่านคำตอบทั้งหมดฉันพบปัญหาในสคริปต์ของฉัน ปัญหาคือวิธีที่ฉันเปลี่ยนเส้นทางgetent
เอาต์พุต ดังนั้นฉันจึงลบสิ่งที่เปลี่ยนเส้นทางทั้งหมดและทำให้getent
บรรทัดมีลักษณะดังนี้:
getent passwd $user > /dev/null
ตอนนี้สคริปต์ของฉันทำงานได้ดี
getent
และใบif
แจ้งยอดของคุณหรือไม่ ที่จะทำให้เกิด$?
การตรวจสอบสถานะออกจากไม่ได้เรียกร้องให้echo
getent
2>&1
2&>1
$1
ไม่ได้ตั้งค่าคำสั่ง if จะส่งคืนจริง จากการทดสอบของฉัน, การแก้ปัญหาจะห่อในราคาคู่:$1
getent passwd "$1" > /dev/null 2&>1
$?
คุณจะได้รับรหัสส่งคืนของtest
คำสั่ง ดูคำตอบด้านล่าง