我想编写一个带有两个参数的脚本,一个字符串和一个数字。该脚本打印字符串 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
实现此目的的一种方法是使用 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