试图grep位置参数

时间:2016-07-22 01:57:05

标签: linux bash unix scripting grep

#! /bin/bash
sum=0
for number in $@
do
    sum=$(( sum + number ))


done
grep [!0-9+-] "$@" | echo $sum

该脚本旨在获取位置参数并将它们添加到一起,但是我还需要脚本再执行两次操作。

  1. 如果位置参数是单词,则在STDOUT上打印单词
  2. 如果位置参数不是数字,则打印错误消息。
  3. 当我运行此脚本时,grep会在当前目录中搜索我输入的表达式的任何其他目录或文件。我需要grep来搜索位置参数的单词,然后将它们生成到stdout。目前,输出只是参数的总和,并且在使用字母时不会识别或产生任何消息。

1 个答案:

答案 0 :(得分:0)

这是我建议你调整的地方。我假设你在你的文件中使用了参数,因为你正在使用$ @ ...你还需要使用-E进行正则表达式搜索。

#!/bin/bash
sum=0
homeworkassignment=1
wordfound=false
for number in $@
do
    evaluate=$(echo "$number" | grep [!0-9+-])
    #check for numbers in $@
    if [ $? = '0' ]; then
    numericvalue=$(echo $number | grep [!0-9+-])
        sum=$(( $sum + $numericvalue ))
    else
        if [ $homeworkassignment=1 ]; then echo "NO NUMBER"; fi
        if [ $homeworkassignment=2 ]; then wordfound=true; fi
    fi
done
echo "The Total Sum is "$sum
if ([ $homeworkcode -eq 2] && [ $wordfound -eq "true" ] ); then echo "A Word was Found"'!';fi

输出:

[root@localhost ~]# ./so_38517168.sh 2 1 2 3 4 NO NUMBERS 1 NO NUMBERS 2 NO NUMBERS 3 NO NUMBERS 4
NO NUMBERS
NO NUMBERS
NO NUMBERS
NO NUMBERS
NO NUMBERS
NO NUMBERS
NO NUMBERS
NO NUMBERS
2 1 2 3 4 NO NUMBERS 1 NO NUMBERS 2 NO NUMBERS 3 NO NUMBERS 4

The Total Sum is 22

注意提取2 1 2 3 4 NO NUMBBER 1 NO NUMBERS 2 NO NUMBERS 3 NO NUMBERS 4的行是因为整行与数字匹配。您可能需要使用sed来完成仅显示此输出中的数字。