bash/ksh grep 脚本接受多个参数
bash/ksh grep script take more than one argument
#!/bin/ksh
if [ -n "" ]
then
if grep -w -- "" codelist.lst
then
true
else
echo "Value not Found"
fi
else
echo "Please enter a valid input"
fi
这是我的脚本,它现在完全按照我想要的方式工作,如果我添加更多参数,我想添加它会给我多个输出,我该怎么做?
所以例如我做 ./test.sh apple 它会在 codelist.lst 中 grep apple 并给我输出:Apple
我想做 ./test.sh apple orange 并且会做:
苹果
橙色
你可以用 shift
和一个循环来做到这一点,比如(在 bash
和 ksh
中都有效):
for ((i = $#; i > 0 ; i--)) ; do
echo "Processing ''"
shift
done
你会注意到我还选择 不 使用 [[ -n "" ]]
方法,因为这会提前终止循环并使用空字符串(例如 ./script.sh a b "" c
不做就停止 c
).
迭代位置参数:
for pattern in "$@"; do
grep -w -- "$pattern" codelist.lst || echo "'$pattern' not Found"
done
对于只调用一次 grep 的更高级用法,请使用 -f
选项和 shell 进程替换:
grep -w -f <(printf '%s\n' "$@") codelist.lst
#!/bin/ksh
if [ -n "" ]
then
if grep -w -- "" codelist.lst
then
true
else
echo "Value not Found"
fi
else
echo "Please enter a valid input"
fi
这是我的脚本,它现在完全按照我想要的方式工作,如果我添加更多参数,我想添加它会给我多个输出,我该怎么做?
所以例如我做 ./test.sh apple 它会在 codelist.lst 中 grep apple 并给我输出:Apple
我想做 ./test.sh apple orange 并且会做: 苹果 橙色
你可以用 shift
和一个循环来做到这一点,比如(在 bash
和 ksh
中都有效):
for ((i = $#; i > 0 ; i--)) ; do
echo "Processing ''"
shift
done
你会注意到我还选择 不 使用 [[ -n "" ]]
方法,因为这会提前终止循环并使用空字符串(例如 ./script.sh a b "" c
不做就停止 c
).
迭代位置参数:
for pattern in "$@"; do
grep -w -- "$pattern" codelist.lst || echo "'$pattern' not Found"
done
对于只调用一次 grep 的更高级用法,请使用 -f
选项和 shell 进程替换:
grep -w -f <(printf '%s\n' "$@") codelist.lst