Bash if then else语法

时间:2018-11-21 20:20:34

标签: bash syntax-error

我正在尝试使用if then else语句使用bash脚本进行测试自动化,但是遇到了一些错误。例如,当我尝试执行它时,我用j和k进行变量赋值做错了,因为它告诉我在尝试执行时找不到命令j和命令k。您如何正确创建变量? 但是,最令人困惑的是,当我尝试执行脚本时,出现一个错误,告诉我在fi附近有一个意外的令牌,然后它只是说'fi'。我在这里做什么错了?

#!/bin/bash

j = 0
k = 0

echo Test1:
echo -ne "0\nIn\nUG\n" | /u/cgi_web/Tuition/cost
echo Test2:
echo -ne "0\nOut\nUG\n" | /u/cgi_web/Tuition/cost
echo Test3:
echo -ne "0\nIn\nGR\n" | /u/cgi_web/Tuition/cost
echo Test4:
echo -ne "0\nOut\nGR\n" | /u/cgi_web/Tuition/cost

for i in {1..17}
do
    echo Test$((i+4)):
if[ "$j" -eq 0 ] && [ "$k" -eq 0 ] then
    $j = 1
    echo -ne "$i\nIn\nUG\n" | /u/cgi_web/Tuition/cost
elif[ "$j" -eq 1 ] && [ "$k" -eq 0 ] then
    $k = 1
    echo -ne "$i\nIn\nGR\n" | /u/cgi_web/Tuition/cost
elif[ "$j" -eq 1 ] && [ "$k" -eq 1 ] then
    $j = 0
    echo -ne "$i\nOut\nUG\n" | /u/cgi_web/Tuition/cost
elif[ "$j" -eq 0 ] && [ "$k" -eq 1 ] then
    $k = 0
    echo -ne "$i\nOut\nGR\n" | /u/cgi_web/Tuition/cost
fi

done

编辑:我想出了j和k的变量问题,我不得不删除语句中的空格。

2 个答案:

答案 0 :(得分:1)

then之前使用if语句进行分号分隔:

if [ condition ] || [ condition ]; then
    # code
elif [ condition ] && [ condition ]; then
    # code
fi

例如。

答案 1 :(得分:1)

为帮助将来可能会寻求帮助的任何人,我认为我会回答自己的问题,这些问题是我在自己的测试中发现的所有语法错误以及其他人的有益答复。 要开始变量分配:

j = 0

您之间不能有空格,所以应该是:

j=0

if语句在if和方括号之间需要一个空格,并且在此之前的最后一个方括号之后需要一个分号。因此,我的错误if语句

if[ "$j" -eq 0 ] && [ "$k" -eq 0 ] then

成为

if [ "$j" -eq 0 ] && [ "$k" -eq 0 ]; then

或者代替分号,您可以在方括号之间添加新行,这样它将变成

if [ "$j" -eq 0 ] && [ "$k" -eq 0 ]
then