[英]Create conditional bash script code
我使用以下代码加载一些带有电子邮件的文本文件,并使用用户密码在系统中创建用户。 文本文件包含以下电子邮件
abc@gmail.com
BDD@gmail.com
ZZZ@gmail.com
如果名称是大写的,我将其转换为小写,我能够使它工作。 现在我需要支持另一个输入而不是电子邮件,例如
P123456
Z877777
但现在我不希望这种类型的输入将其转换为小写
有点像
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")
假设:
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
:对于所有记录都为true,表示将所有输入print
到输出 现在将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
bash 可以小写文本 :
while IFS= read -r line; do
[[ $line == *@* ]] && line=${line,,}
# do stuff with "$line"
done
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.