shell 检查/etc/passwd中的uid号是否在某个范围内并且尚未使用,使用嵌套的if

vuv7lop3  于 2023-06-30  发布在  Shell
关注(0)|答案(1)|浏览(109)

我试图检查已经使用的uid,并且在1000到60000的范围内,使用嵌套的if条件,但只有范围条件有效。它还打印$hpass内容。有什么想法可以改进代码吗?
提前感谢您的任何建议!
下面是我的代码:

#!/bin/bash
dbpasswd=$(cat /etc/passwd | cut -d ":" -f3 | sort -n)
hpass=$(printf '%d\n' "$dbpasswd")  #to put all numbers on separeate line
while true; do
read -p "Enter a number between 1000 and 59999" num
echo ""
if [[ "$num" -gt 1000 && "$num" -lt 60000 ]]; then
   if [[ "$num" -eq "$hpass" ]]; then 
   echo "$num is already in use"
   else
   echo "$num is in range and not yet used!"
   break
   fi
else
   echo "$num is out of range"
fi
done
dgenwo3n

dgenwo3n1#

/etc/passwd uid列表加载到数组中:

uids=()

while read -r uid
do
    uids[$uid]="$uid"
done < <(cut -d":" -f3 /etc/passwd)

修改OP的当前代码以测试$num是否是数组中的元素:

while true; do
    read -p "Enter a number between 1000 and 59999: " num
    echo ""

    if [[ "$num" -gt 1000 && "$num" -lt 60000 ]]; then
        if [[ -n "${uids[num]}" ]]; then 
            echo "$num is already in use"
        else
            echo "$num is in range and not yet used!"
            break
        fi
    else
        echo "$num is out of range"
    fi
done

相关问题