0

我正在尝试编写一个 shell 脚本“echo.by”,它根据用户的选择多次回显其参数。例如,如果用户输入命令行

echo.by 5 Play it again, Sam. <return> 

脚本应该打印

Play it again, Sam. 
Play it again, Sam. 
Play it again, Sam. 
Play it again, Sam. 
Play it again, Sam. 

但是,我不知道如何仅打印再次播放,Sam 并排除第一个参数。该$*命令打印所有内容,所以我最终得到

5 Play it again, Sam. 
5 Play it again, Sam. 
5 Play it again, Sam. 
5 Play it again, Sam. 
5 Play it again, Sam. 

我的脚本需要能够容纳第一个数字之后的任何脚本,所以我不能只告诉 shell 回显$2 $3 $4 $5

这是我的脚本:

count = 0 
while test $count -lt $1 
do 
echo $* 
count = `expr $count + 1` 
done
4

4 回答 4

2

只需放入$1稍后将引用的变量,然后添加shift到脚本的顶部。

于 2013-10-26T20:21:27.427 回答
1
 #!/bin/bash
 times="$1"
 shift
 for f in $(seq "$times"); do
     echo "$@"
 done

编辑$times如@Charles Duffy 建议的那样改为小写。为了更好地与其他 POSIX(-like) 系统兼容,您可能需要更改循环以使用 C 样式 -for语法。该seq命令在 NetBSD、FreeBSD 和 GNU 系统中可用。

于 2013-10-26T20:21:53.377 回答
1

尝试使用C 风格的 for 循环 数组 slice来执行此操作:

#!/bin/bash

for ((i=0; i<$1; i++)); do
    echo "${@:2:${#@}}"
done
于 2013-10-26T20:25:55.960 回答
0
#!/bin/bash
times="$1"
shift
for ((f=0; f<times; i++)); do
    printf '%s\n' "$*"
done
于 2013-10-27T00:55:12.810 回答