bash - Bash 的新手 - 不断收到非法选项错误

标签 bash shell ubuntu-13.04

我对 ubuntu 和 bash 脚本编写还很陌生,想知道为什么我在使用 GETOPTS 时可能会遇到此错误。

这是我用来运行它的代码。

sh /home/ubuntu/Desktop/test.sh -f /home/u/Desktop/ -p 'TEST'

我认为我正确地调用了脚本,它应该使用 grap 搜索我作为搜索词输入的词。但由于某种原因它没有。任何有关我在使用 grep 时作为一般规则可以做什么的建议也将不胜感激,谢谢。

#!/bin/bash

valid=0
file_arg=""
display_help=""
column=""
pattern=""

while getopts f:d:s:m: opt
do
    case "$opt" in
        d)  display_help=$OPTARG
            ;;
        f)  file_arg=$OPTARG
            ;;
        c)  column=$OPTARG
            ;;
        p)  pattern=$OPTARG
            ;;
        *)  valid=1
            break
            ;;
    esac
done

if [ $valid -eq "0" ]
then
    if [ $pattern != "" ]
    then
        cat $file_arg | grep $pattern
    else
        cat $file
    fi
else
    echo -n "Usage: FILE -f <name> | COLUMN -> -c <name> | HELP -> -d | PATTERN -> -p <expression>"
fi

最佳答案

getopts 中,您没有指定 p 选项,您只有 f:d:s:m: 选项。

我想你的意思是p而不是m,反之亦然。

它应该是 f:d:s:m:p:f:d:s:p:

关于bash - Bash 的新手 - 不断收到非法选项错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22909253/

相关文章:

python - 如何根据包含相同文件的目录结构重新排列文件?

CoffeeScript:安装后无输出

linux - sed:在文件中的一行之前插入一个带有反斜杠和换行符的宏

linux - 如何通过 ssh 将 echo 的输出重定向到一个文件

linux - Bash 字符串连接并获取内容

regex - 使用 grep (Bash) 找到匹配项后打印上一次出现的正则表达式

linux - 在 shell 脚本中创建等于的表达式

python - 程序的 Linux 权限问题