Я являюсь новым в сценариях удара и нуждаюсь в помощи со следующим:
Цель этой домашней работы состоит в том, чтобы позволить студентам записать программы в языке сценариев удара, которые позволяют им управлять данными в текстовом файле так же к таблице базы данных..
Студенты должны понять структуру таблицы и записать программы check_table, row_select и row_delete с помощью языка сценариев удара.
Структура таблицы таблица состоит из текстового файла, который содержит строки. Первая строка содержит информацию о таблице, и каждая остальная часть строк представляет строку данных.
Первая структура строки следующие:
table_name:number_of_rows:number_of_fields:fieldname1,fieldname2,filedname3 ...etc
Каждая строка данных состоит из серии полей, разграниченных символом запятой’’. Каждая строка имеет точно то же количество полей как все другие поля в таблице. Поле состоит из строки алфавитно-цифровых символов, не превышает 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.check_table
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.
Мне нужно некоторое руководство об этом.
Заранее спасибо.
Только, чтобы помочь Вам начать, сохраните это в файле и установите выполнить режим, затем выполняет его в терминале. Посмотрите на вывод и сравните его со сценарием. Посмотрите, можно ли понять, как это имеет отношение. Используйте ссылку, которым уже предложили помочь.
#!/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 ...
Что-то как этот.
Другие методы доступны, конечно,
Вы должны, по крайней мере, начать с изучения основ bash. Я рекомендую прочитать http://mywiki.wooledge.org/BashGuide .
После прочтения руководства вы захотите разобрать текстовый файл построчно и / или поле за полем, что объясняет Bash FAQ 1 . ]
Вам также нужно будет выполнить некоторые манипуляции со строками. Часто задаваемые вопросы по Bash 100 должны охватывать это.