написание сценария оболочки, который выводит n-ю строку - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь написать сценарий оболочки, который выводит n-ю строку из файла с именем file.txt, но я продолжаю получать различные ошибки;один из них, включая

Line 7: [: 10 file.txt: integer expression expected

, и поэтому я не могу заставить его работать.Что я делаю не так?

# Read from the file file.txt and output the tenth line to stdout.
#!/bin/bash

len=`wc -l file.txt`
echo $len

if [ "$len" -lt 10 ]
then
    errormessage="File too short"
    echo $errormessage
    exit 0
fi

var=`sed '10q;d' file.txt`
echo $var

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Вместо того, чтобы просто дать wc -l file.txt, дайте cat file.txt | wc -l.последний вернет только количество строк, тогда как первый вернет число строк с именем файла рядом с ним.

0 голосов
/ 09 июня 2018

Показать десятую строку или выдать сообщение об ошибке и выйти:
Я буду использовать exit 1, так как 0 нормально нормально.
Однако, чтобы иметь специальный код возврата для sed, я будузаставить sed вернуть 1 для совпадения.

errormessage="File too short"
var=$(sed -n '10 {p;q1}' file.txt) && { echo "${errormessage}"; exit 1; }
# You must have spaces above the pipes |    |                       |  |
0 голосов
/ 08 июня 2018

wc -l file... печатает количество строк и имя файла для каждого имени файла, указанного в качестве аргумента

Если имена файлов не указаны, wc -l считывает из стандартного ввода и просто печатает количество строк.

Короче говоря, используйте

len=$(wc -l < file.txt)

Обратите внимание на перенаправление, так что вместо имени файла в командной строке используется stdin.

И попробуйте полностью забыть о существовании обратных галочек:их использование устарело в течение эонов.Используйте синтаксис $(...), как показано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...