如何在 if 语句中使用命令作为条件时编写 bash 脚本?

如何在 if 语句中使用命令作为条件时编写 bash 脚本?

我正在编写一个 bash 脚本来处理来自 html 表单的输入。

第一个问题是,在使用命令作为条件时,我无法让 if 语句起作用。我正在尝试检查中间名首字母的用户输入并调整它以确保它可以合并到 $answer 中。

这是它应该如何处理的示例。

用户从html表单输入三个不同的字段;名字、中间名首字母、姓氏。

名字:乔治
中间首字母:W.
姓氏:布什

Shell 脚本将处理并比较用户输入和实际答案。实际答案是“乔治·W·布什”

用户输入:
George W. Bush = 正确 echo“你是正确的!”
乔治·W·布什 = 通过在“W”后自动添加句点来正确
乔治·布什 != 错误并回显“没有中间首字母!”
Geor W. Bus != 错误并回显“名字和姓氏错误!”

#! /bin/bash
echo Content-type: "text/html"
echo ""

read input #name variable $first, $middle, $last name

first=`user input`
middle=`user input`
last=`user input`

president=`actual answer, full name of president`
answer=`user answer, combination of $first, $middle, $last`

correctF=`actual first name from $president`
correctM=`actual middle initial from $president`
correctL=`actual last name from $president`
#cut by column from $president

第一个问题从这里开始。

if [[ $(echo $middle | wc -l) = 1 ]] ; then
    middle=`echo "$middle""."` 
    #check if middle initial variable was entered with just the letter and place a period after
elif [[ $(echo $middle | grep '.') = 'true' ]] ; then
    middle=`echo "$middle"`
    #check if middle initial variable was entered with the period and leave it as is
else
    middle=`'false'`
    #no middle initial variable was entered and is null
fi

while 循环与 if 语句的第二个问题。

我试图将用户输入 $answer 与实际答案 $president 进行比较,并回显 $answer 出了什么问题。本节没有任何内容回显。

while [ "$president" -ne "$answer" ] #not working
    do
            if [ "$first" -ne "$correctF" ]
                    then
                            echo "Wrong first name!"
            elif [ "$middle" -ne "$correctM" ]
                    then
                            echo "Wrong middle initial!"
            elif [ "$last" -ne "$correctL" ]
                    then
                            echo "Wrong last name!"
            elif [ -z "$middle" -ne "$correctM" ]
                    then
                            echo "No middle initial!"
            elif [ "$first" -ne "$correctF" ] && [ "$last" -ne "$correctL" ]
                    then
                            echo "Wrong first and last name!"
            elif [ "$first" -ne "$correctF" ] && [ "$middle" -ne "$correctM" ]
                    then
                            echo "Wrong first name and middle initial!"
            elif [ "$middle" -ne "$correctM" ] && [ "$last" -ne "$correctL" ]
                    then
                            echo "Wrong middle initial and last name!"
            elif [ "$first" -ne "$correctF" ] && [ "$middle" -ne "$correctM"] && [ "$last" -ne "$correctL" ]
                    then
                            echo "You got it all wrong!"
                    else
                            echo "You are correct!"
            fi

我需要将命令正确地实现到 if 语句条件中,并编写具有多个条件的 if 语句。

答案1

cas 说,“这个脚本有太多错误,我什至不知道从哪里开始……”。好吧,我有一些关于从哪里开始的想法:

  • 请不要要求我们调试您的脚本然后发布伪代码。您的第一个代码块在不起作用的地方包含反引号 (`)。
  • 请说得更明确一些。 “我无法让我的 if 语句发挥作用”对我们来说没有多大帮助。会发生什么?
  • 您应该始终引用您的 shell 变量引用(例如,"$middle"),除非您有充分的理由不这样做,并且您确定您知道自己在做什么。
  • $(echo "$middle" | grep '.')'true' 仅当"$middle"等于时才等于true。的输出 grep内容输入中与作为参数给出的模式匹配的行的数量。
  • .是一个表示“任何字符”的模式,因此grep '.'将匹配任何非空白输入行。检查实际周期(.), 使用grep '\.'。请注意,这W.不仅会匹配.W, ...,3.14159等。
  • 你为什么要做一个while?您是否希望该代码执行多次?您是否期望对相同数据重复执行时会得到不同的结果?循环的终点在哪里?
  • -eq-ne仅应在比较整数时使用;使用=!=对于字符串。
  • 你是什​​么意思?-z STRING1 -ne STRING2

也许还有其他问题,但我的眼睛太痛了,无法再看这个了。

相关内容