2013-03-28 109 views
0

我在Bourne Shell脚本中构建了一个学生数据库,这实际上是我第一次看到这样的代码,所以我非常失望我的元素。我需要这样做,以便当用户输入课程时,程序将检查用户输入与已有课程的数据库,如果课程不存在,则提示用户输入新课程。这就是我想:在Bourne Shell脚本中同时使用While和Grep

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

[[/bin/test的快捷方式,这不是你想要的。 (这里有一个man page一下吧。)

试试这个:

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

或者

until grep -i "$course1" course3.dat 

grep表达式的值为true时的grep成功(即匹配行),以及!颠倒了。直到从相反的语义构建而来。

+0

是的,工作。谢谢。我不知道为什么我认为我需要[] - .-谢谢 – Josephine 2013-03-28 03:28:29

1

[[[是“测试”,其中你想要什么。

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