J’utilise le code suivant pour charger un fichier texte avec des emails et créer des utilisateurs dans le système avec un mot de passe utilisateur. le fichier texte contient des e-mails comme suit
[email protected] [email protected] [email protected]
Si le nom vient avec les majuscules, je le convertis en minuscules, j’ai pu le faire fonctionner. Maintenant, je dois prendre en charge une autre entrée au lieu de l’email, par exemple
P123456 Z877777
mais maintenant je ne veux pas pour ce type d’entrée pour le convertir en minuscules
quelque chose comme
if(emailpattern ) convert to lower else Not
C’est le code qui fonctionne mais je n’ai pas réussi à le faire fonctionner …
for user in $(cat ${users} | awk -F";" '{ print $1 }'); do user=$(echo ${user} | tr "[:upper:]" "[:lower:]") log "cf create-user ${user} ${passwd}" #Here we are creating email user in the sys cf create-user ${user} ${passwd} 2>&1 | tee -a ${dir}/${scriptname}.log || { log "ERROR cf create-user ${user} failed" ; errorcount=$[errorcount + 1]; } done
Vous pouvez utiliser:
while IFS= read -r user; do # convert to lowercase only when $user has @ character [[ $user == *@* ]] && user=$(tr "[:upper:]" "[:lower:]" <<< "$user") log "cf create-user ${user} ${passwd}" cf create-user ${user} ${passwd} 2>&1 | tee -a ${dir}/${scriptname}.log || { log "ERROR cf create-user ${user} failed" ; errorcount=$[errorcount + 1]; } done < <(awk -F ';' '{ print $1 }' "$users")
Hypothèses:
log/cf/tee/errorcount
fonctionnent comme vous le souhaitez Exemple de fichier d’entrée:
$ cat userlist [email protected] [email protected] [email protected] P123456 Z877777
Nous allons commencer par utiliser awk
pour convertir de manière conditionnelle les adresses électroniques en minuscules:
$ awk '/@/ {$1=tolower($1)} 1' userlist [email protected] [email protected] [email protected] P123456 Z877777
userlist
) via awk
… /@/
: pour les lignes qui incluent une adresse e-mail (c.-à-d. contient @
) … $1=tolower($1)
: convertit l’adresse e-mail (zone n ° 1) en minuscules, puis … 1
: vrai pour tous les enregistrements et implique d’ print
toutes les entrées en sortie Conduisez maintenant la sortie awk
vers une boucle while pour effectuer le rest des opérations:
awk '/@/ {$1=tolower($1} 1}' userlist | while read user do log "cf create-user ${user} ${passwd}" #Here we are creating email user in the sys cf create-user ${user} ${passwd} 2>&1 | tee -a ${dir}/${scriptname}.log || { log "ERROR cf create-user ${user} failed" ; errorcount=$((errorcount + 1)) ; } done
bash peut texte en minuscule :
while IFS= read -r line; do [[ $line == *@* ]] && line=${line,,} # do stuff with "$line" done