Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 转义bash中的特殊字符,case函数_Sql_Database_Bash - Fatal编程技术网

Sql 转义bash中的特殊字符,case函数

Sql 转义bash中的特殊字符,case函数,sql,database,bash,Sql,Database,Bash,我正在用bash创建一个脚本。这个脚本将做一个MySQL数据库一样的kan-do,我已经建立了函数,选择,插入,更新,删除,我已经为它创建了一个登录菜单。现在,我需要做的最后一件事是在运行脚本后能够在命令行上插入SQL语句。我已经创建了一个函数,允许在命令行上输入“-help”来运行help函数。我还创建了在命令行中输入SELECT命令的选项,例如: ./database.sh SELECT name FROM student ./database.sh SELECT * FROM stude

我正在用bash创建一个脚本。这个脚本将做一个MySQL数据库一样的kan-do,我已经建立了函数,选择,插入,更新,删除,我已经为它创建了一个登录菜单。现在,我需要做的最后一件事是在运行脚本后能够在命令行上插入SQL语句。我已经创建了一个函数,允许在命令行上输入“-help”来运行help函数。我还创建了在命令行中输入SELECT命令的选项,例如:

./database.sh SELECT name FROM student
./database.sh SELECT * FROM student
这将显示数据库中可用名称的完整列表。但我无法让下面的陈述起作用:

例如:

./database.sh SELECT name FROM student
./database.sh SELECT * FROM student
这将显示可用的完整数据库。但事实并非如此,我曾经想过逃离*角色,但这也不起作用。到目前为止,我已经在下面创建了一段代码,脚本将在运行任何函数之前运行这些代码

if [ -z $1 ]; then
    Inlog
else
    if [ "$1" = "--help" ] ; then
        Help
    else

        case "$*" in
            "SELECT naam FROM student")
                echo "Hieronder is een overzicht van de namen van de studenten die aanwezig zijn in de database."
                echo "------------------------"
                cat $naam_dir
                ;;
            "SELECT nummer FROM student")
                echo "Hieronder is een overzicht van de studentnummers van de studenten die in de database aanwezig zijn."
                echo "------------------------"
                cat $nummer_dir
                ;;
            "SELECT mail FROM student")
                echo "Hieronder is een overzicht van de e-mail adressen van de studenten die in de database aanwezig zijn."
                echo "-----------------------"
                cat $mail_dir
                ;;
            "SELECT \*\ FROM student")
                paste $naam_dir $nummer_dir $mail_dir | expand t-20
            *)
                exit
                ;;
        esac
    fi
fi

我希望有人能帮我摆脱这些角色。SQL查询也应该以“;”结尾,到目前为止,我也无法在bash中完成此操作。。。也许有人有主意。

看看切换到printf的
-q

范例

$ printf "%q" "'include_path=/path/to/dir'" 
\'include_path=/path/to/dir\'
帮助打印f

除了printf(1)中描述的标准格式规范之外 和printf(3),printf解释:


我担心你不能让它工作。原因是,
*
以及
对shell具有特殊含义。也就是说,
*
是与当前目录中的所有文件匹配的通配符。您必须在命令调用时对其进行转义/引用,例如:

您不必在case语句中转义
*
,因为它已经被
引用了

符号的特殊含义是(请参见
man bash
…由a;分隔的命令按顺序执行。这意味着您始终可以将
添加到命令调用中,但它不会作为参数提供给被调用的命令,除非您转义/引用它:

./database.sh SELECT mail FROM student\;
编辑:我刚看到弗雷德里克的中间编辑。

可以使用
set-f
bash
中禁用文件名扩展(即,
*
将不会扩展)但是,这必须在调用shell中执行,并且不能在脚本中执行。

您可以考虑定义自己的术语。而不是在命令行上使用*,您可以使用所有的或任何其他您喜欢的东西。甚至对用户来说可能更好。<>代码>设置-f NoGub < /C>命令在运行脚本之前不起作用。。我认为我没有足够的权限,因为我正在构建它,并将它放在学校拥有的外壳上。嗯,好吧,我自己也这么认为,但我的老师说他想要一个数据库脚本,而且查询也可以通过命令行完成。但我认为从你的评论来看,这是行不通的。@bryan:为什么不能将整个参数字符串括在引号中,例如
/database.sh“SELECT*FROM student”
?这样就可以通过命令行进行查询。。。
./database.sh SELECT mail FROM student\;