从URL到shell脚本的参数

时间:2017-02-06 10:03:25

标签: bash apache shell

如何将一个像 /?photo = 1.png 这样的URL参数作为变量放入shell脚本中,运行到apache上的cgi-bin容器中?

修改 我生成一个目录中所有文件的列表。

#!/bin/bash
echo "Content-type: text/html"
echo 

for file in /var/www/html/export/tui/*;
    do
        echo "<a href='/cgi-bin/test.cgi?file="${file: -27}"'>"${file: -27}"</a><br>";
done;

现在,我想将文件名作为参数提供给第二个脚本,需要它来阅读它。

1 个答案:

答案 0 :(得分:0)

我找到了一个采用URL参数并将其放入我的脚本

的解决方案
#!/bin/bash
echo "Content-type: text/html"
echo

function cgi_decodevar()
{
    [ $# -ne 1 ] && return
    local v t h

    t="${1//+/ }%%"
    while [ ${#t} -gt 0 -a "${t}" != "%" ]; do
        v="${v}${t%%\%*}" # digest up to the first %
        t="${t#*%}"       # remove digested part

        if [ ${#t} -gt 0 -a "${t}" != "%" ]; then
            h=${t:0:2} 
            t="${t:2}" 
            v="${v}"`echo -e \\\\x${h}` 
        fi
    done

    echo "${v}"
    return
}


function cgi_getvars()
{
    [ $# -lt 2 ] && return
    local q p k v s

    case $1 in
        GET)
            [ ! -z "${QUERY_STRING}" ] && q="${QUERY_STRING}&"
            ;;
        POST)
            cgi_get_POST_vars
            [ ! -z "${QUERY_STRING_POST}" ] && q="${QUERY_STRING_POST}&"
            ;;
        BOTH)
            [ ! -z "${QUERY_STRING}" ] && q="${QUERY_STRING}&"
            cgi_get_POST_vars
            [ ! -z "${QUERY_STRING_POST}" ] && q="${q}${QUERY_STRING_POST}&"
            ;;
    esac
    shift
    s=" $* "

    while [ ! -z "$q" ]; do
        p="${q%%&*}"  
        k="${p%%=*}"  
        v="${p#*=}"   
        q="${q#$p&*}" 

        [ "$1" = "ALL" -o "${s/ $k /}" != "$s" ] && \
            export "$k"="`cgi_decodevar \"$v\"`"
    done
    return
}

cgi_getvars BOTH ALL


echo $foo