Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 创建条件bash脚本代码_Regex_Linux_Bash_Shell_Unix - Fatal编程技术网

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