Помогите с bash скриптом с текстом

Обычно вы запускаете sudo apt-get install ..., и sudo будет запрашивать ваш пароль при первом вызове sudo и кешировать пароль в течение 10 или 15 минут, поэтому следующие вызовы sudo не требуют пароля.

Если вы запустите apt-get install ... из корневого запроса, он никогда не будет запрашивать пароль.

-3
задан 28 June 2012 в 18:12

13 ответов

Просто, чтобы помочь вам начать, сохраните это в файле и установите режим выполнения, затем запустите его в терминале. Посмотрите на вывод и сравните его со сценарием. Посмотрим, сможете ли вы понять, как это связано. Используйте ссылку, которая уже была предложена, чтобы помочь.

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

Что-то в этом роде.

Конечно, доступны другие методы

-1
ответ дан 25 July 2018 в 18:16

Вы должны, по крайней мере, начать с изучения основ bash. Я рекомендую прочитать http://mywiki.wooledge.org/BashGuide .

После прочтения руководства вы захотите разобрать текстовый файл построчно и / или по полю, что объясняет Bash FAQ 1 .

Вам также нужно будет выполнить некоторые манипуляции со строками. Часто задаваемые вопросы по Bash 100 должны покрыть это.

4
ответ дан 25 July 2018 в 18:16

Просто, чтобы помочь вам начать, сохраните это в файле и установите режим выполнения, затем запустите его в терминале. Посмотрите на вывод и сравните его со сценарием. Посмотрим, сможете ли вы понять, как это связано. Используйте ссылку, которая уже была предложена, чтобы помочь.

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

Что-то в этом роде.

Конечно, доступны другие методы

-1
ответ дан 2 August 2018 в 00:30

Вы должны, по крайней мере, начать с изучения основ bash. Я рекомендую прочитать http://mywiki.wooledge.org/BashGuide .

После прочтения руководства вы захотите разобрать текстовый файл построчно и / или поле за полем, что объясняет Bash FAQ 1 .

Вам также нужно будет выполнить некоторые манипуляции со строками. Часто задаваемые вопросы по Bash 100 должны покрыть это.

4
ответ дан 2 August 2018 в 00:30

Просто, чтобы помочь вам начать, сохраните это в файле и установите режим выполнения, затем запустите его в терминале. Посмотрите на вывод и сравните его со сценарием. Посмотрим, сможете ли вы понять, как это связано. Используйте ссылку, которая уже была предложена, чтобы помочь.

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

Что-то в этом роде.

Конечно, доступны другие методы

-1
ответ дан 4 August 2018 в 15:58

Вы должны, по крайней мере, начать с изучения основ bash. Я рекомендую прочитать http://mywiki.wooledge.org/BashGuide .

После прочтения руководства вы захотите разобрать текстовый файл построчно и / или поле за полем, что объясняет Bash FAQ 1 .

Вам также нужно будет выполнить некоторые манипуляции со строками. Часто задаваемые вопросы по Bash 100 должны покрыть это.

4
ответ дан 4 August 2018 в 15:58

Просто, чтобы помочь вам начать, сохраните это в файле и установите режим выполнения, затем запустите его в терминале. Посмотрите на вывод и сравните его со сценарием. Посмотрим, сможете ли вы понять, как это связано. Используйте ссылку, которая уже была предложена, чтобы помочь.

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

Что-то в этом роде.

Конечно, доступны другие методы

-1
ответ дан 6 August 2018 в 00:36

Просто, чтобы помочь вам начать, сохраните это в файле и установите режим выполнения, затем запустите его в терминале. Посмотрите на вывод и сравните его со сценарием. Посмотрим, сможете ли вы понять, как это связано. Используйте ссылку, которая уже была предложена, чтобы помочь.

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

Что-то в этом роде.

Конечно, доступны другие методы

-1
ответ дан 7 August 2018 в 18:02

Вы должны, по крайней мере, начать с изучения основ bash. Я рекомендую прочитать http://mywiki.wooledge.org/BashGuide .

После прочтения руководства вы захотите разобрать текстовый файл построчно и / или поле за полем, что объясняет Bash FAQ 1 .

Вам также нужно будет выполнить некоторые манипуляции со строками. Часто задаваемые вопросы по Bash 100 должны покрыть это.

4
ответ дан 7 August 2018 в 18:02

Просто, чтобы помочь вам начать, сохраните это в файле и установите режим выполнения, затем запустите его в терминале. Посмотрите на вывод и сравните его со сценарием. Посмотрим, сможете ли вы понять, как это связано. Используйте ссылку, которая уже была предложена, чтобы помочь.

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

Что-то в этом роде.

Конечно, доступны другие методы

-1
ответ дан 10 August 2018 в 06:50

Вы должны, по крайней мере, начать с изучения основ bash. Я рекомендую прочитать http://mywiki.wooledge.org/BashGuide .

После прочтения руководства вы захотите разобрать текстовый файл построчно и / или поле за полем, что объясняет Bash FAQ 1 .

Вам также нужно будет выполнить некоторые манипуляции со строками. Часто задаваемые вопросы по Bash 100 должны покрыть это.

4
ответ дан 10 August 2018 в 06:50

Просто, чтобы помочь вам начать, сохраните это в файле и установите режим выполнения, затем запустите его в терминале. Посмотрите на вывод и сравните его со сценарием. Посмотрим, сможете ли вы понять, как это связано. Используйте ссылку, которая уже была предложена, чтобы помочь.

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

Что-то в этом роде.

Конечно, доступны другие методы

-1
ответ дан 15 August 2018 в 18:47
  • 1
    < <(cat $1) лучше написано < "$1"; нет смысла сначала, чтобы cat прочитал файл, а затем оболочку. Также цитаты. – geirha 28 June 2012 в 21:29
  • 2
    Еще несколько улучшений: Разделение каждого поля строки с использованием cut очень неэффективно, лучше использовать read. IFS=: read -ra fields <<< "$line"; echo "First field is ${fields[0]}, second is ${fields[1]}, ..." (см. mywiki.wooledge.org/BashFAQ/001 ). Синтаксис $[ ... ] для выполнения математики давно устарел. Это даже не зарегистрировано больше. Используйте rowcount=$(( rowcount + 1 )) или ((rowcount++)). – geirha 29 June 2012 в 03:18

Вы должны, по крайней мере, начать с изучения основ bash. Я рекомендую прочитать http://mywiki.wooledge.org/BashGuide .

После прочтения руководства вы захотите разобрать текстовый файл построчно и / или по полю, что объясняет Bash FAQ 1 .

Вам также нужно будет выполнить некоторые манипуляции со строками. Часто задаваемые вопросы по Bash 100 должны покрыть это.

4
ответ дан 15 August 2018 в 18:47

Другие вопросы по тегам:

Похожие вопросы: