Нарисовать прямоугольник в bash

Cloonix с версии 42.03 делает Wi-Fi внутри гостей. Для этого он использует модуль mac80211 _hwsim и программное обеспечение, работающее в гостевой системе, которое передает сигнал хосту, а затем другим гостям.

-3
08.04.2020, 11:40
3 ответа

если ваша цель не предоставляет tput, вы можете использовать что-то вроде этого:

#!/bin/bash
read -p "enter the size of the rectangle: " size
clear
for (( i = 1; i <= size; i++ )); do
  for (( j = 1; j <= size; j++ )); do
    if (( 1 == i || size == i || 1 == j || size == j )); then
      echo -n "*"
    else
      echo -n " "
    fi
  done
  echo
done

В противном случае ваше уже реализованное решение будет в порядке.

1
28.04.2021, 23:18
#!/bin/bash

read -p 'Size: ' sz

topbottom=$(yes '*' | head -n "$sz" | tr -d '\n' )
printf -v midrows '*%*s*' "$((sz-2))" ""

printf '%s\n' "$topbottom"
yes "$midrows" | head -n "$((sz-2))"
printf '%s\n' "$topbottom"

Это вычисляет верхнюю и нижнюю строки, (они одинаковы ), а затем средние строки (, они тоже одинаковы ). Затем вывод верхней и нижней строк выполняется двумя вызовами printf, а средние строки выводятся утилитой yes(и усекаются до правильного количества строк ).

Зашифрованный формат *%*s*в вызове printfозначает «*, строку ширины, заданную следующим аргументом, а затем еще *». Ширина — это заданный размер прямоугольника минус 2, а строка — пустая строка (, она будет дополнена пробелами ).

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

2
28.04.2021, 23:18

Это делает все, что в bash встроено -в ins :нет необходимости в yes, head, tr, tput или вложенных циклах.

Paul--) cat./myBox
#! /bin/bash

sz=$(( ${1:-10} - 2 ))

printf -v xBlk '%-*s' ${sz} ''
xAst="${xBlk//?/*}"
xRow="${xAst//?/ x}"

printf '*%s*\n' "${xAst}"
for r in ${xRow}; do printf '*%s*\n' "${xBlk}"; done
printf '*%s*\n' "${xAst}"

Paul--)./myBox 5
*****
*   *
*   *
*   *
*****
Paul--) 
0
28.04.2021, 23:18

Теги

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