Bash脚本以查找文件中的括号是否正确关闭

Bash脚本以查找文件中的括号是否正确关闭,bash,shell,matching,brackets,Bash,Shell,Matching,Brackets,我是一个完全的初学者,所以我有一个愚蠢的问题。假设我有一个方括号.txt文件,它有这样一个字符串,我想写一个脚本,检查是否所有方括号都正确闭合,并且没有太多方括号打印所有内容都正确或类似的内容。例如,每个括号中都有匹配的括号,但它们没有正确闭合。我知道如何查找和计算它们,但检查部分真的让我很烦恼,我将非常感谢您的帮助 这就是逻辑 如果字符串以-开头,则不正确 如果以a开头,则转至3 对于每一个增量,计数器都会说“openBraces”;对于遇到的每个减量,计数器 如果在运行完3之后,上面的“op

我是一个完全的初学者,所以我有一个愚蠢的问题。假设我有一个方括号.txt文件,它有这样一个字符串,我想写一个脚本,检查是否所有方括号都正确闭合,并且没有太多方括号打印所有内容都正确或类似的内容。例如,每个括号中都有匹配的括号,但它们没有正确闭合。我知道如何查找和计算它们,但检查部分真的让我很烦恼,我将非常感谢您的帮助

这就是逻辑

如果字符串以-开头,则不正确 如果以a开头,则转至3 对于每一个增量,计数器都会说“openBraces”;对于遇到的每个减量,计数器 如果在运行完3之后,上面的“openBraces”计数为0;你所有的牙套都合上了;否则就有问题了 注:“openBraces”的正值表示超过,而“openBraces”的负值表示超过。 希望它能有所帮助,继续移除,直到你不能再移除为止。如果留下任何内容,则输入无效

while [[ $string = *'()'* ]] ; do
    string=${string//()/}
done

if [[ $string ]] ; then
    echo Invalid
else
    echo Valid
fi

我想你可以试试下面的代码:

    String input = "()))((";
     int count1=0;
     int count2=0;
     boolean temp = false;
     char[] a = new char[input.length()];
     for(int x=0;x<input.length();x++){
         a[x] = input.charAt(x);
         if(a[x]=='('){
             count1++;
         }
         else if(a[x]==')'){
             count2++;
         }
     }
     if(a[0]==')'){
         temp = true;
     }
     else if(a[0]=='(' && count1==count2){
         int t1=1;
         int t2=0;
         for(int x=1;x < input.length();x++){
             if(a[x]=='('){
                 t1++;
             }
             if(a[x]==')'){
                 t2++;
                 if(t2>t1){
                   temp = true;
                   break;
                 }
             }
         }

    }
     else{
        temp = true;
     }
     if(!temp){
         System.out.println("correct");
     }
     else{
         System.out.println("incorrect");
     }

发布您迄今为止尝试过的代码。这是一个非常常见的问题。做一些关于检查的研究。我还没有发现任何关于括号检查的东西,尽管我现在正在挖掘awk和grep命令。@Accalar-当你处理递归时,我不会在这个问题上使用任何正则表达式,最好编写一个简单的循环来检查剩余的括号,请参见Sayuris Answer,您还需要检查openBraces是否从不低于零,这表示右大括号前面没有匹配的左大括号。如果他正在寻找Java解决方案而不是bash解决方案,他可以这样做。不过,这一个非常好,如果字符串的括号中有任何类型的字符,那么这就不起作用:@Acallar:dosomethingString=$tr-cd