hi, UNIX troldmænd,
Jeg har et spørgsmål om logikken i mit inderste for loop nedenfor. først, hvad jeg forsøger at gøre, er at skrive et manuskript kaldet create_account, der automatisk skaber mysql regnskaber. brugeren kan skabe et brugernavn eller en group_id som et argument (og scriptet kan tage flere argumenter). user_name argumenter bør simpelthen være vedlagt en user_file.
gruppe-id'er skal være i forhold til en fil, der indeholder en liste over group_ids med flere user_names pr id. hvis gruppen id eksisterer, håndteringshåndtag alle brugere og append til user_file. hvis gruppen id ikke eksisterer, print "gruppe-id ikke gyldig".
selvfølgelig det første, jeg skal gøre, er at validere argument - hvis et antal af en bestemt type, jeg går ud fra dets en group_id. andet, er det en user_name. BTW, "is_num" er en funktion til at validere hvis argumentet er et tal (og dermed en group_id).
----------------------------------------------
get arg
- Hvis argumentet er et tal
- derefter validere group_id
- hvis num er ugyldig group_id,
- derefter udskrive "gruppe-id ikke gyldig"
- hvis num er gyldigt group_id
- derefter parse group_id_file og håndteringshåndtag brugere fra 4. felt på
----------------------------------------------
min kode virker godt, når jeg har kun et argument og det gør ikke noget hvis argumentet er gyldigt group_id, en ugyldig group_id eller en user_name. men når jeg bruger flere parametre, problemer med min kode er:
- user_name argumenter får passeret gennem den indvendige for loop og bør ikke være, fordi de ikke kan passere de is_num funktion kriterier
- kommandoer med flere parametre køre alle argumenter flere gange
- for eksempel, hvis jeg siger ...
Code:
create_acct valid_num invalid_num
... Jeg får en liste med alle de gyldige brugere gange 2
Jeg spørger mig selv, hvis nogen har tid til at punkt mig i den rigtige retning. tak for din hjælp.
Code:
for arg; do
if is_num $arg; then
#----------------------------------------------
for num; do
a=$(grep "^c$num:" group_file)
if [ -z "$a" ]; then
print "Group ID " $num "is not in group file."
continue
fi
f4=$(echo $a | cut -d: -f4)
if [ -z "$f4" ]; then
print "Group ID " $num "does not have any users."
else
print $f4 | tr ',' '\n' >> user_list
continue
fi
done
#----------------------------------------------
else
echo $arg >> user_list
fi
done