0

我正在用 Bourne Shell Script 构建一个学生数据库,这实际上是我第一次看到这样编写的代码,所以我非常不适应。我需要这样做,以便当用户输入课程时,程序会检查用户输入与我已经拥有的课程数据库,如果课程不存在,则提示用户输入新课程。这就是我正在尝试的:

   echo "course-1: \c"
   read course1
   while [[ grep -i "$course1" course3.dat == 1]]
   do
        echo "course does not exist"
        echo "course-1: \c"
        read course1  
   done
   echo "course-2: \c"
   read course2
   while [[ grep -i "$course2" course3.dat == 1]]
   do
        echo "course does not exist"
        echo "course-2: \c"
        read course2
   done

但我收到错误“预期的条件二元运算符”和“'-i' 附近的语法错误”。我一直在尝试谷歌的答案,但我没有想出任何有用的东西。所以我想知道你们中是否有人可以帮助我?非常感谢。

4

2 回答 2

2

[[是 的快捷方式/bin/test,这不是您想要的。(这是有关它的手册页。)

试试这个:

while ! grep -i "$course1" course3.dat

或者

until grep -i "$course1" course3.dat

grepgrep 成功(即匹配行)时,表达式的计算结果为 true,并且 ! 倒置。直到内置了与while相反的语义。

于 2013-03-28T03:20:25.287 回答
1

[[并且[是“测试”,这就是您想要的。

但是,不同的 shell 有不同的语法;ksh 或 bash 可以解释“[[”,但 Bourne shell(通常是 /bin/sh)不会。

于 2013-04-02T19:19:29.540 回答