繁体   English   中英

创建条件bash脚本代码

[英]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
  • 已更新,以便将errorcount正确递增1

bash 可以小写文本

while IFS= read -r line; do 
    [[ $line == *@* ]] && line=${line,,}
    # do stuff with "$line"
done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM