无法在Bash中向命令添加参数

时间:2009-05-20 21:32:02

标签: bash parameters

我有以下代码,我称之为谷歌

#!/bin/bash

q=$1
open "http://www.google.com/search?q=$q"

用关键字打开Firefox。例如,通过

google cabal

我希望在命令后输入参数时为命令添加特定的keywoards。以下是一个例子

google -x cabal

它搜索序列,例如

"cabal is"

如何在Bash中为命令添加参数?

3 个答案:

答案 0 :(得分:3)

#!/bin/bash
while getopts "x:" option; do
  case "$option" in
    x) keyword="$OPTARG";;
  esac
done
#echo "$keyword"
open "http://www.google.com/search?q=$keyword"

:指定x是预期的参数。

答案 1 :(得分:3)

由于您有两个信息来源(搜索词和修饰符),我将使用以下内容。它允许使用单个修饰符(-x附加“is”并将整个内容括在引号-d中,用于前缀“define:”并将整个内容括在引号中,并-w只需添加搜索词即可将您限制为维基百科。

请注意,引号的位置由修饰符控制,因为它可能需要引用传递给Google的参数或在该参数之外添加搜索词。您可以完全控制URL中生成的内容(确保在发送到生产环境之前将echo转回open)。

#!/bin/bash
prepend=""
append=""
case "$1" in
    -h)
        echo 'Usage: google [-{hxdw}] [<arg>]'
        echo '       -h: show help.'
        echo '       -x: search for "<arg> is"'
        echo '       -d: search for "define:<arg>"'
        echo '       -w: search for <arg> site:wikipedia.org'
        exit;;

    -x)
        prepend="\""
        append=" is\""
        shift;;
    -d)
        prepend="\"define:"
        append="\""
        shift;;
    -w)
        prepend=""
        append=" site:.wikipedia.org"
        shift;;
esac
if [[ -z "$1" ]] ; then
    query=""
else
    query="?q=${prepend}${1}${append}"
fi
echo http://www.google.com/search${query}

以下是一些示例输出:

pax> google -w "\"bubble sort\""
http://www.google.com/search?q="bubble sort" site:.wikipedia.org

pax> google cabal
http://www.google.com/search?q=cabal

pax> google
http://www.google.com/search

pax> google -d cabal
http://www.google.com/search?q="define:cabal"

pax> google -x wiki
http://www.google.com/search?q="wiki is"

pax> google -h wiki
Usage: google [-{hxdw}] [<arg>]
       -h: show help.
       -x: search for "<arg> is"
       -d: search for "define:<arg>"
       -w: search for <arg> site:wikipedia.org

如果您未提供搜索字词,则只需访问Google搜索页。

答案 2 :(得分:2)

#!/usr/bin/env bash

while [[ $1 = - ]]; do
    case $1 in
        -x) shift; query+=" $1 is"     ;;
        -d) shift; query+=" define:$1" ;;
        -s) shift; query+=" site:$1"   ;;
        -t) shift; query+=" title:$1"   ;;
        -i) params+="&btnI"            ;;
        # ...
        -h)
            echo "usage: ${0##*/} [-x arg] [-d arg] [-s arg] [-t arg] [-ih]"
            echo
            echo "    -x: Add '[arg] is' to the google query."
            echo "    -d: Add 'define:[arg]' to the google query."
            echo "    -s: Add 'site:[arg]' to the google query."
            echo "    -t: Add 'title:[arg]' to the google query."
            echo "    -i: Do an I'm Feeling Lucky-search."
            echo "    -h: Show this help text."
            exit ;;
    esac
    shift
done

query+="$*" # implode all other arguments into the query string.

open "http://www.google.com/search?q=$query$params"