Regex 创建条件bash脚本代码
我使用以下代码加载一些带有电子邮件的文本文件 并使用用户密码在系统中创建用户。 文本文件包含如下电子邮件Regex 创建条件bash脚本代码,regex,linux,bash,shell,unix,Regex,Linux,Bash,Shell,Unix,我使用以下代码加载一些带有电子邮件的文本文件 并使用用户密码在系统中创建用户。 文本文件包含如下电子邮件 abc@gmail.com BDD@gmail.com ZZZ@gmail.com 如果名字是大写的,我把它转换成小写,我就能让它工作了。 现在我需要支持另一个输入,而不是电子邮件 e、 g 但是现在我不想让这种类型的输入转换成小写 差不多 if(emailpattern ) convert to lower else Not 这是代码的工作,但我未能使其工作 for user
abc@gmail.com
BDD@gmail.com
ZZZ@gmail.com
如果名字是大写的,我把它转换成小写,我就能让它工作了。
现在我需要支持另一个输入,而不是电子邮件
e、 g
但是现在我不想让这种类型的输入转换成小写
差不多
if(emailpattern )
convert to lower
else
Not
这是代码的工作,但我未能使其工作
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
您可以使用:
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")
而IFS=read-r用户;做
#仅当$user具有@character时才转换为小写
[[$user==*@*]]和&user=$(tr“[:upper:][:lower:][:lower:][:p>假设:
- 输入文件由电子邮件地址或名称组成,每个地址或名称位于单独的行上
- 电子邮件地址将转换为小写
- 名称保持原样(即不转换为小写)
- 所有
log/cf/tee/errorcount
代码都可以根据需要运行
示例输入文件:
$ cat userlist
abc@gmail.com
BDD@gmail.com
ZZZ@gmail.com
P123456
Z877777
我们将首先使用awk
有条件地将电子邮件地址转换为小写:
$ awk '/@/ {$1=tolower($1)} 1' userlist
abc@gmail.com
bdd@gmail.com
zzz@gmail.com
P123456
Z877777
- 首先,我们将通过
awk
运行输入文件(userlist
)
/@/
:对于包含电子邮件地址的行(即,包含@
)
$1=tolower($1)
:将电子邮件地址(字段#1)转换为所有小写,然后
1
:适用于所有记录,并意味着将所有输入打印到输出
现在,通过管道将awk
输出传输到while
循环以执行其余操作:
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
- 已更新为将errorcount正确递增1
bash:
有几件事(对我来说)不清楚…你在同一个文件中有混合的电子邮件地址和名称(例如,
P123456
)吗?在你的示例代码中,${users}
的值是什么?哪里是${password}
来自哪里?实际的值是什么(bash)要为各种类型的输入数据生成的命令?@markp-可以混合使用,但可以是电子邮件或名称…,用户是文件的上下文,密码是constant@john,请注意,${user}
与“$user”非常不同
--谢谢,我试过了,但出现了错误awk:无法打开文件用户
,有什么想法吗?现在试试。抱歉,文件名应该是:“$users”
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
while IFS= read -r line; do
[[ $line == *@* ]] && line=${line,,}
# do stuff with "$line"
done