Я хотел бы, чтобы оболочка печатала каждую новую строку без пробелов и также удаляла пустые пробелы - PullRequest
1 голос
/ 19 января 2020

Моя оболочка печатает вывод, как показано ниже.

$ echo ${mount_check[*]} |tr "." "\n"
File system /abc is NOT mounted
 File system /xyz is NOT mounted

$

Я пытался использовать echo "${mount_check[*]}", однако это не печатало вывод так, как я хотел.

Я бы например, оболочка печатает каждую новую строку без пробелов и удаляет пустые строки, как показано ниже.

File system /abc is NOT mounted
File system /xyz is NOT mounted

По запросу Дэвида и Трипли, добавив полный код.

fstable=( $(awk '!/bind|swap|shm/ && $1 !~/#|^$/ && !/^ +$/ { print $2 }' /etc/fstab))
mount_check=($(for mount in "${fstable[@]}"; do
if [[ -z $(findmnt -m "$mount") ]]
then
echo "File system $mount is NOT mounted."
fi
done))

Ответы [ 3 ]

1 голос
/ 19 января 2020

Если ваша цель - создать массив mount_check [] со статусом всех монтирований, этот l oop:

mount_check=($(for mount in "${fstable[@]}"; do
if [[ -z $(findmnt -m "$mount") ]]
then
echo "File system $mount is NOT mounted."
fi
done))

должен быть таким:

mount_check=()
for mount in "${fstable[@]}"; do
    mount_status=$(findmnt -m "$mount")
    if [[ -z "$mount_status" ]]
    then
        mount_status="File system $mount is NOT mounted."
    fi
    mount_check+=( "$mount_status" )
done
1 голос
/ 19 января 2020

Я не уверен в вашем полном требовании, поэтому, решив ваш вопрос, укажите c.

awk решение:

echo "${mount_check[*]}" | awk -F'mounted.' '{gsub(/ File/,"File");print $1 FS ORS $2 FS}'

ИЛИ не один лайнер для вышеуказанного решения:

echo "${mount_check[*]}" |\ 
awk -F'mounted.' '
{
  gsub(/ File/,"File")
  print $1 FS ORS $2 FS
}'

Я полагаю, что ваш вывод всегда будет иметь File строку в выводе.

Что примет это решение забота о:

  • Это НЕ будет печатать пробел, который появляется во 2-й строке, когда вы использовали команду tr.
  • 2-ая вещь, которая потребуется позаботьтесь о том, чтобы была пустая строка, которая НЕ будет напечатана.


Если вы хотите придерживаться своего кода tr, то попробуйте выполнить следующее.

echo "${mount_check[*]}" |tr '.' '\n' | sed -E 's/^ +//g;/^$/d'
0 голосов
/ 19 января 2020

Предполагая, что вы никогда не использовали эти переменные для чего-либо еще, вы можете просто добавить эти настройки в сам скрипт Awk.

awk '!/bind|swap|shm/ && $1 !~/#|^$/ && !/^ +$/ {
    p = $2 ; sub(/[.]/, "", p); print p}' /etc/fstab
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...