带文本的 bash 脚本帮助

带文本的 bash 脚本帮助

我是 Bash 脚本的新手,需要以下方面的帮助:

这项作业的目的是让学生用 bash 脚本语言编写程序,使他们能够像数据库表一样操作文本文件中的数据。

学生应该了解表结构并使用 bash 脚本语言编写程序 check_table、row_select 和 row_delete。

表格结构 表格由包含多行文本文件组成。第一行包含表格信息,其余每行代表一行数据。

第一行结构如下:

table_name:number_of_rows:number_of_fields:fieldname1,fieldname2,filedname3 ...etc
  • table_name 为不超过 16 个字符的字母数字字符串,且不包括列字符 ':' 和空格字符 ' '。必须与文件名相同。
  • number_of_rows 是一个小于 1000 的整数。
  • number_of_fields 是一个小于 10 的整数。
  • filedname 是一个不超过 16 个字符的字母数字字符串,不包括空格“ ”和逗号“,”字符。

每个数据行由一系列以逗号字符“,”分隔的字段组成。每行的字段数与表中所有其他字段数完全相同。字段由一串字母数字字符组成,不超过 16 个字符,并且不包含空格字符“ ”或逗号字符“,”。

例子:

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

程式

1.检查表

syntax: check_table <table_name>

描述:

该程序按顺序检查以下内容:

  • 命令语法
  • 表已存在。
  • 第一行语法正确。
  • 表名和字段名都有正确的长度。
  • 表格的行数正确。
  • 所有行都有正确数量的字段。

输出:

  • 桌子很好
  • 表有一个问题问题描述(遇到的第一个问题)

例子:

$ 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.

我需要一些关于此的指南。

提前致谢。

答案1

你至少应该从学习 bash 的基础知识开始。我建议你阅读http://mywiki.wooledge.org/BashGuide

阅读完本指南后,您将需要了解如何逐行和/或逐字段解析文本文件,这将Bash 常见问题 1解释道。

您还需要做一些字符串操作。Bash 常见问题 100应该涵盖这一点。

答案2

为了帮助您入门,请将其保存在文件中并设置执行模式,然后在终端中运行它。查看输出并将其与脚本进行比较。看看您是否能理解它是如何关联的。使用已经建议的参考资料来提供帮助。

#!/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

为了实现字段检查,也许需要cut将行分解为单独的标记,例如在信息行中:

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

并且给定样本,$number_of_rows 应该包含“3”

因此,为了检查这是否正确,您可以使用一个在每次循环时递增的计数器:

rowcount=$[rowcount+1]

当没有更多数据时,$rowcount 应该等于 $number_of_rows,因此:

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

类似这样的。

当然还有其他方法

相关内容