Эхо конкретного слова в bash

Вопрос или проблема

В основном, у меня есть набор команд bash, которые запрашивают информацию о моем компьютере.

Например:

> host=$(hostname -A) 
hostname=$(hostname -I) 
Pub_IP=$(dig +short myip.opendns.com @resolver1.opendns.com) 
Kernel_Version=$(uname -v | awk -F"Debian" '{print $2}' | cut -d ' ' -f2 | cut -d '-' -f1)
Deb_Version=$(cat /etc/debian_version)

Я также выводил это на экран

echo $host $hostname  $Pub_IP  $Kernel_Version $Deb_Version > info.txt

Что мне нужно выяснить, так это как я могу поставить | между каждым из параметров. Так что, если я открою свой файл info.txt, он будет выглядеть примерно так

 | debianmachine | output_of_hostname | output_of_Pub_IP |

Кроме того, я могу сделать это с помощью print?

Если вы заключите строки в кавычки или экранируете их, вы можете включить пайпы:

echo "| ${host} | ${hostname} ..."

Конечно, вы также можете использовать printf (я так понимаю, что именно это вы имеете в виду в конце вашего вопроса):

printf '| %s | %s | %s ...' "${host}" "${hostname}" "${Pub_IP}" ...

Вы можете воспользоваться повторяющимся поведением printf, чтобы упростить строку формата:

printf '| %s ' "${host}" "${hostname}" "${Pub_IP}" ...; printf '|\n'

Это повторит последовательность | %s столько раз, сколько необходимо, и закончит строку пайпом и возвратом каретки.

Используйте printf:

printf '| %s | %s | %s | %s | %s |\n' "$host" "$hostname" "$Pub_IP" "$Kernel_Version" "$Deb_Version" >info.txt

%s в строке формата printf (первый аргумент для printf) — это зам placeholders для строк, и каждый из них будет заменен другими аргументами, переданными printf, по очереди.

Одна из идей может заключаться в том, чтобы сохранить все переменные в массив и распечатать их с необходимыми модификациями в цикле.

Хотя, я думаю, более эффективно и просто будет конкатенация строк в shell, например:

echo "| $host | $hostname | $Pub_IP | $Kernel_Version | $Deb_Version |" > info.txt

Другой способ — использовать простой цикл awk для поэтапного создания содержимого файла, например:

awk '{print "|" \
  for (i=1 ; i <= NF ; i++) \
    print " ", $i, " |"}' \
info.txt | xargs -11 > temp.txt && mv temp.txt info.txt

Ответ или решение

Для того чтобы вывести информацию о вашем компьютере с разделителями в виде «|» в файле info.txt, можно использовать несколько простых подходов. Я перечислю наиболее актуальные методы.

Метод 1: Использование echo

Вы можете создать строку, содержащую все данные с разделителями, и вывести ее в файл с помощью команды echo. Например:

host=$(hostname -A)
hostname=$(hostname -I)
Pub_IP=$(dig +short myip.opendns.com @resolver1.opendns.com)
Kernel_Version=$(uname -v | awk -F"Debian" '{print $2}' | cut -d ' ' -f2 | cut -d '-' -f1)
Deb_Version=$(cat /etc/debian_version)

echo "| $host | $hostname | $Pub_IP | $Kernel_Version | $Deb_Version |" > info.txt

Этот код будет записывать в файл info.txt строку с вашими данными, разделенными вертикальными чертами.

Метод 2: Использование printf

Команда printf позволяет более точно контролировать формат вывода. Вот как это можно сделать:

host=$(hostname -A)
hostname=$(hostname -I)
Pub_IP=$(dig +short myip.opendns.com @resolver1.opendns.com)
Kernel_Version=$(uname -v | awk -F"Debian" '{print $2}' | cut -d ' ' -f2 | cut -d '-' -f1)
Deb_Version=$(cat /etc/debian_version)

printf '| %s | %s | %s | %s | %s |\n' "$host" "$hostname" "$Pub_IP" "$Kernel_Version" "$Deb_Version" > info.txt

Здесь %s является заполнительным элементом для строк, которые будут заменены значениями ваших переменных.

Метод 3: Использование массива

Если вы хотите сделать код более динамичным, можно хранить ваши переменные в массиве и затем их выводить. Вот пример:

info=("$host" "$hostname" "$Pub_IP" "$Kernel_Version" "$Deb_Version")

output=""
for value in "${info[@]}"; do
    output+="| $value "
done
output+="|"

echo "$output" > info.txt

Вывод

Существует несколько способов вывода информации с разделителями в bash. Вы можете выбрать любой из описанных методов в зависимости от ваших предпочтений и задач. Для простоты и удобочитаемости чаще всего используют первый или второй способы.

Надеюсь, это помогло вам решить вашу задачу! Если у вас есть дополнительные вопросы, не стесняйтесь задавать.

Оцените материал
Добавить комментарий

Капча загружается...