Ajuda com script bash com texto

-3

Sou novo no bash scripting e preciso de ajuda com o seguinte, por favor:

O objetivo desta lição de casa é permitir que os alunos escrevam programas na linguagem bash de scripts que permitem manipular dados em um arquivo de texto de forma semelhante a uma tabela de banco de dados.

Os alunos devem entender a estrutura da tabela e escrever os programas check_table, row_select e row_delete usando a linguagem de script bash.

Estrutura da tabela Uma tabela consiste em um arquivo de texto que contém linhas. A primeira linha contém informações sobre o tabela e cada uma das outras linhas representa uma linha de dados.

A estrutura da primeira linha é a seguinte:

table_name:number_of_rows:number_of_fields:fieldname1,fieldname2,filedname3 ...etc
  • table_name é uma cadeia alfanumérica que não excede 16 caracteres e não inclui o caractere de coluna ‘:’ nem o caractere de espaço ‘‘. Deve ser o mesmo que o nome do arquivo.
  • number_of_rows é um número inteiro com valor menor que 1000.
  • number_of_fields é um número inteiro com valor menor que 10.
  • filedname é uma cadeia alfanumérica que não excede 16 caracteres e não inclui os caracteres de espaço "‘ nem a vírgula ‘,’.

Cada linha de dados consiste em uma série de campos delimitados pelo caractere de vírgula ','. Cada linha tem exatamente o mesmo número de campos que todos os outros campos da tabela. Um campo consiste em uma string caracteres alfanuméricos, não exceda 16 caracteres e não contém o espaço caractere ‘nem o caractere de vírgula‘, ’.

Exemplo:

students_info:3:5:std_1st_name,std_last_name,year_ of_birth,sex,program
amer,salim,1990,m,bit
samira,rami,1988,f,ise
lamia,rida,1990,f,ise

Programas

1.check_table

syntax: check_table <table_name>

Descrição:

O programa verifica o seguinte na ordem:

  • sintaxe de comando
  • a tabela existe.
  • A sintaxe da primeira linha
  • está correta.
  • nome da tabela e nomes de campo têm comprimentos corretos.
  • A tabela possui o número correto de linhas.
  • Todas as linhas têm o número correto de campos.

Saída:

  • a tabela é boa
  • tabela tem um problema descrição do problema (primeiro problema encontrado)

exemplo:

$ check_table students_info
table students_info is good
$ check_table student_info1
table students_info has at least one problem:
Actual number of rows not equal to the one in the file header.

Eu preciso de um guia sobre isso.

Obrigado antecipadamente.

    
por user73778 28.06.2012 / 12:45

2 respostas

4

Você deve pelo menos começar aprendendo o básico do bash. Recomendo a leitura do link .

Depois de ler o guia, você vai querer analisar um arquivo de texto linha-por-linha e / ou campo a campo, que Bash FAQ 1 explica.

Você também precisará fazer algumas manipulações de string. FAQ 100 da Bash deve cobrir isso.

    
por geirha 28.06.2012 / 15:09
-1

Apenas para ajudar você a começar, salve em um arquivo e defina o modo de execução e execute-o em um terminal. Veja a saída e compare-a com o script. Veja se você consegue entender como isso se relaciona. Use a referência que já foi sugerida para ajudar.

#!/bin/bash

if [[ $# != 1 ]]
then
    echo usage $0 "<table_to_check>"
    exit 1
fi

error=""
firstline=1
{
    while read line # loop through the lines
    do
    # check syntax of "line"
        if(($firstline))
        then
        #check first line syntax
            echo information row=$line # debug

            # ... your method here. Assign to error if something is wrong...

            firstline=0 # ready for next line/loop which should be data
        else
        #check other lines
            echo data row=$line # debug

            # ... your method here. Assign to error if something is wrong...

        fi


        if [[ $error != "" ]] # assign any error in the data as a string message you can then print here and exit
        then
            echo $error 
            exit 2
        fi
    done
} < "$1"

exit 0 # no error

Para implementar as verificações de campo, talvez dê uma olhada em cut para dividir a linha em tokens individuais, por exemplo, na linha de informações:

number_of_rows='echo $line | cut -d':' -f2'

e dada a amostra, $ number_of_rows deve conter "3"

Então, para verificar isso, você pode usar um contador que é incrementado em cada loop:

rowcount=$[rowcount+1]

Quando não houver mais dados, $ rowcount deve ser igual a $ number_of_rows, então:

    if (( $rowcount != $number_of_rows ))
    then
        error="number of rows doesn't agree"
        # ... etc ...

Algo parecido com isso.

Outros métodos estão disponíveis, é claro

    
por Thorsen 28.06.2012 / 16:59