在Bourne Shell脚本中一起使用While和Grep

时间:2013-03-28 03:09:27

标签: grep sh

我正在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”附近的“语法错误”。我一直试图谷歌的答案,但我没有提出任何有用的东西。所以我想知道你们有没有人能帮助我?非常感谢。

2 个答案:

答案 0 :(得分:2)

[[/bin/test的快捷方式,不是您想要的。 (这是关于它的man page。)

请改为尝试:

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

或者

until grep -i "$course1" course3.dat

当grep成功(即匹配行)时,grep表达式的计算结果为true,并且!颠倒那个。直到从而构建了相反的语义。

答案 1 :(得分:1)

[[[为“test”, 是您想要的。

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