Shell脚本接受2个参数

时间:2020-03-04 04:58:14

标签: linux bash shell ubuntu

我创建了一个名为am.sh的shell脚本,该脚本创建文本并将其放置到文件中。我现在想创建另一个脚本,该脚本将接受am.sh创建的文本文件,例如words.txt和一个数字,因此使用以下命令:

./bm.sh words.txt 5

将输出words.txt文件中包含的前5个单词。

到目前为止,我所做的所有脚本仅使用一个参数,因此我感到非常困惑。到目前为止,我想到的是:

#!/bin/sh
grep '[A-Za-z]' | while read
do
echo " $a "
done

但是我需要一种方法来接受用户想要的单词数,然后需要创建一个循环,该循环将从文本文件输出。

2 个答案:

答案 0 :(得分:0)

这对我有用:

#!/bin/sh

file=$1
word_count=$2
fields=$(echo $(seq 1 $word_count) | sed 's/\s/,/g')

head -n 1 $file | cut -d ' ' -f$fields

位置参数1($1)必须是第一个脚本创建的文件的文件名。第二个($2)是应该打印的单词数。

我假设单词之间用一个空格分隔。

答案 1 :(得分:0)

假设am.sh生成的文件每行只有一个单词,那么您可以使用:

#!/bin/sh

[ $# = 2 ] || { echo "Usage: $(basename "$0" .sh) file numlines" >&2; exit 1; }

sed "${2}q" "$1"

第一行代码检查是否有两个参数,并指示如何使用该命令,如果没有,则退出并显示错误状态。

第二行使用sed打印文件的第一行。同样,您可以使用head打印文件的第一行:

head -n "$2" "$1"

如果文件每行包含多个单词,则可以使用:

tr -s '[[:space:]]' '\n' < "$1" |
sed "${2}q"

(或head -n "$2")。

请注意,脚本不会验证$1是可读文件,也不验证$2是大于零的整数。

相关问题