BASH:如何通过询问参数来构造php命令?

时间:2010-08-24 06:21:00

标签: bash

最终目标是使bash运行类似

php script.php argument1 argument2 argument3

但是,我想向用户询问参数1,2和3,它将构造上述并运行它。

2 个答案:

答案 0 :(得分:1)

read命令可以解决问题:

pax> read -p 'What? ' p ; echo .${p}.
What? hello
.hello.

出于特定目的,您可以使用:

pax> cat qq.sh
   #!/bin/bash
   read -p 'Enter argument 1: ' arg1
   read -p 'Enter argument 2: ' arg2
   read -p 'Enter argument 3: ' arg3
   echo Will run: php script.php \"${arg1}\" \"${arg2}\" \"${arg3}\"

pax> ./qq.sh
   Enter argument 1: hello there
   Enter argument 2: goodbye
   Enter argument 3: once again
   Will run: php script.php "hello there" "goodbye" "once again"

使用man read获取更多详细信息,但它可能会为您提供大量的bash联机帮助页,因此我将复制我的相关部分:


read [-ers] [-u fd] [-t timeout] [-a aname] [-p prompt]
     [-n nchars] [-d delim] [name ...]

One line is read from the standard input, or from the file descriptor fd
supplied as an argument to the -u option, and the first word is assigned
to the first name, the second word to the second name, and so on, with
leftover words and their intervening separators assigned to the last name.

If there are fewer words read from the input stream than names, the
remaining names are assigned empty values. The characters in IFS are used
to split the line into words. The backslash character (\) may be used to
remove any special meaning for the next character read and for line
continuation.
Options, if supplied, have the following meanings:

-a aname      The words are assigned to sequential indices of the array
              variable aname, starting at 0. aname is unset before any new
              values are assigned. Other name arguments are ignored.
-d delim      The first character of delim is used to terminate the input
              line, rather than newline.
-e            If the standard input is coming from a terminal, readline is
              used to obtain the line.
-n nchars     Read returns after reading nchars characters rather than
              waiting for a complete line of input.
-p prompt     Display prompt on standard error, without a trailing newline,
              before attempting to read any input. The prompt is displayed
              only if input is coming from a terminal.
-r            Backslash does not act as an escape character. The backslash is
              considered to be part of the line. In  particular, a
              backslash-newline pair may not be used as a line continuation.
-s            Silent mode. If input is coming from a terminal, characters are
              not echoed.
-t timeout    Cause read to time out and return failure if a complete line of
              input is not read within timeout seconds. This option has no
              effect if read is not reading input from the terminal or a pipe.
-u fd         Read input from file descriptor fd.

If no names are supplied, the line read is assigned to the variable REPLY.
The return code is zero, unless  end-of-file is encountered, read times out,
or an invalid file descriptor is supplied as the argument to -u.

答案 1 :(得分:0)

dialog循环中使用for程序,这里有点漂亮:

#!/bin/bash

RESULT=/tmp/$0.tmp

for arg in "Age" "Sex" "Location"; do

        dialog --inputbox "Enter $arg: " 0 0 2> "$RESULT"

        # Add the content of the result file to our argument array
        args[${#args[@]}]=$(cat "$RESULT")

done

rm -f "$RESULT"

arguments="--age=\"${args[0]}\" --sex=\"${args[1]}\" --location=\"${args[2]}\""