Saya ingin membuat skrip untuk memeriksa apakah ada pengguna. Saya menggunakan logika di bawah ini:
# getent passwd test > /dev/null 2&>1
# echo $?
0
# getent passwd test1 > /dev/null 2&>1
# echo $?
2
Jadi, jika pengguna ada, maka kami sukses, kalau tidak, pengguna tidak ada. Saya telah menempatkan perintah di atas dalam skrip bash seperti di bawah ini:
#!/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
Sekarang, skrip saya selalu mengatakan bahwa pengguna ada apa pun yang terjadi:
# sh passwd.sh test
yes the user exists
# sh passwd.sh test1
yes the user exists
# sh passwd.sh test2
yes the user exists
Mengapa kondisi di atas selalu dinilai BENAR dan mengatakan bahwa pengguna itu ada?
Di mana saya salah?
MEMPERBARUI:
Setelah membaca semua tanggapan, saya menemukan masalah dalam skrip saya. Masalahnya adalah cara saya mengarahkan getentoutput. Jadi saya menghapus semua hal pengalihan dan membuat getentgaris terlihat seperti ini:
getent passwd $user > /dev/null
Sekarang skrip saya berfungsi dengan baik.
getentdan ifpernyataan Anda ? Itu akan menyebabkan $?untuk memeriksa status keluar echo, bukan panggilan Anda getent.
2>&1bukan 2&>1.
$1tidak disetel, pernyataan if akan mengembalikan true. Dari pengujian saya, solusi akan membungkus $1dalam tanda kutip ganda: getent passwd "$1" > /dev/null 2&>1.
$?Anda mendapatkan kode kembali daritestperintah. Lihat jawaban di bawah ini.