Я делаю цикл, который принимает входные данные из файла, чтобы определить, разрешено ли пользователю использовать определенную программу.bash for loop with file input not working
#!/bin/bash
boole=false
echo "Username: "
read username
echo "debug0"
for((line=1; $boole=false; line++)); do
echo "debug.5"
auth=`head -n $line users | tail -n $line`
echo "debug1"
if [ $username = $auth ]; then
echo "debug2"
echo "authentication success"
read
exit 0
fi
if [ $auth = "#end" ]; then
echo "debug3"
echo "authentication failed"
read
exit 0
fi
done
echo "skip everything"
Выход
Username:
admin
debug0
skip everything
Файл с пользователями имеет
root
admin
...
#end
#end
и boole
должен сказать петлю до конца
Это просто этап отладки так он фактически не выполняет какую-либо программу, это просто должно сказать мне, что r, или нет, пользователю разрешено использовать его.
В вашем цикле for '$ boole = false' будет расширяться до' false = false', вероятно, не то, что вы хотите. удалите '$'. Удачи. – shellter
Это кажется неэффективным способом чтения файла - почему бы просто не использовать цикл while while? – FatalError
Или, еще лучше, 'grep -q"^$ {username} $ "users && .....'? – twalberg