Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
Bash:如何在while循环中格式化这些条件?_Bash - Fatal编程技术网

Bash:如何在while循环中格式化这些条件?

Bash:如何在while循环中格式化这些条件?,bash,Bash,如何将下面的2个条件格式化为一个while循环,以确保data enter至少包含一个字母字符,并且在/dev/null目录中不存在 一, 二, 我知道while循环中的两个参数有不同的格式,因为它取决于这两个参数,但是我不确定 我在下面找到了这个来源,我可以继续尝试一个错误,但是我想知道为什么我选择以这种方式格式化条件 您可以这样使用循环: while read -r -p "Please enter valid input: " name; do [[ $name == *[a-zA-

如何将下面的2个条件格式化为一个while循环,以确保data enter至少包含一个字母字符,并且在/dev/null目录中不存在

一,

二,

我知道while循环中的两个参数有不同的格式,因为它取决于这两个参数,但是我不确定

我在下面找到了这个来源,我可以继续尝试一个错误,但是我想知道为什么我选择以这种方式格式化条件


您可以这样使用循环:

while read -r -p "Please enter valid input: " name; do
   [[ $name == *[a-zA-Z]* ]] && { id -u "$name" >/dev/null 2>&1 || break; }
done

echo "Got a good name: $name"
  • read
    用于while循环,该循环将停止循环,直到在循环内执行
    break
  • $name==*[a-zA-Z]*
    将检查输入中是否存在字母表
    name
    <代码>*用于任一侧的全球化
  • 如果在用户数据库中找到输入的名称,并且在
    id
    命令失败时执行
    break
    命令(用户名是唯一的),则
    id-u
    命令将返回
    0
  • /dev/null 2>&1
    用于从
    id
    命令中禁止stdout/stderr,因为我们只关心
    id
    的返回状态

您可以这样使用循环:

while read -r -p "Please enter valid input: " name; do
   [[ $name == *[a-zA-Z]* ]] && { id -u "$name" >/dev/null 2>&1 || break; }
done

echo "Got a good name: $name"
  • read
    用于while循环,该循环将停止循环,直到在循环内执行
    break
  • $name==*[a-zA-Z]*
    将检查输入中是否存在字母表
    name
    <代码>*用于任一侧的全球化
  • 如果在用户数据库中找到输入的名称,并且在
    id
    命令失败时执行
    break
    命令(用户名是唯一的),则
    id-u
    命令将返回
    0
  • /dev/null 2>&1
    用于从
    id
    命令中禁止stdout/stderr,因为我们只关心
    id
    的返回状态

请您解释一下所选的read选项,以及为什么这样格式化?括号周围的星号是什么,为什么一个条件使用双方括号,下一个条件使用卷曲的方括号。你为什么把“休息”也包括在内?(我知道break结束了循环)为什么使用这种方式:>/dev/null 2>&1您提到了“id-I”,但是在您的示例中,您使用了“id-u”,而且双管道不是表示“或”吗?在这个例子中,双管是什么意思。没问题:),你在这个例子中使用的双管是做什么的?你能解释一下你选择的阅读选项以及为什么你用这种方式格式化它吗?括号周围的星号是做什么的,为什么你在一个条件下使用双方括号,在下一个条件下使用卷曲的方括号。你为什么把“休息”也包括在内?(我知道break结束了循环)为什么使用这种方式:>/dev/null 2>&1您提到了“id-I”,但是在您的示例中,您使用了“id-u”,而且双管道不是表示“或”吗?在这个例子中,双管是什么意思。没问题:),您在这个例子中使用的双管是做什么的?
while read -r -p "Please enter valid input: " name; do
   [[ $name == *[a-zA-Z]* ]] && { id -u "$name" >/dev/null 2>&1 || break; }
done

echo "Got a good name: $name"