文字列と数値の2つのパラメータを使用するスクリプトを作成したいと思います。このスクリプトは、アスタリスクで丸められた文字列をn回印刷します。だから前の場合。script "Hello World!" 3
以下を印刷します。
**************
*Hello World!*
*Hello World!*
*Hello World!*
**************
どうすればいいですか?
答え1
*
文字列の長さを入力の長さと同じにするために使用できますsed
。非常に簡単に繰り返すこともできます。各ラインの出力は次のようになります。
*$stars*
*$input*
...repeated...
*$stars*
*
したがって、必要な文字列を配置する単純な「出力」関数を作成できます。
#!/bin/bash
string=$1
count=$2
stars=$(echo "$string" | sed 's/./*/g')
output() { printf "*%s*\n" "$1"; }
output "$stars"
for ((a=0;a<$count;a++))
{
output "$string"
}
output "$stars"
例えば
./x "Hello world!" 3
**************
*Hello world!*
*Hello world!*
*Hello world!*
**************
答え2
これを行う1つの方法は、seqを使用して文字列がエコーされた回数を示し、printfを使用してアスタリスクに対して文字列操作を実行することです。
SAY=$1
NUM=$2
CMD="echo *$SAY*"
c="${SAY//[*]}**"
s=$(printf "%-${#c}s" "*")
echo "${s// /*}"
for i in $(seq $NUM)
do $CMD
done
echo "${s// /*}"
その後、パラメータでスクリプトを使用できます。./script.sh "Hello World" 3