怎么在网站上运行SH脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么在网站上运行SH脚本相关的知识,希望对你有一定的参考价值。
我在自己网站上写了个SH脚本 但是不会调用 怎么调用 啊 怎么让他运行
如何区分php脚本是在shell下运行还是在web上浏览授权方式:署名,非商业用途,保持一致,转载时请务必以超链接(http://www.fwolf.com/blog/post/243)的形式标明文章原始出处和作者信息及本声明。
一般我们使用php是作web开发用的,但php也能够在shell下运行,就像bash、python脚本一样,方式一是通过php -r或php -f命令(nix和win下都可用),另一种方式是在php文件的前面加上“#! /usr/bin/php”,并chmod +x xxx.php。
虽然php程序在这两种情况下运行的结果基本一致,但还是有所区别的,首先他们使用不同的php.ini配置文件,这个以前就说过了;其次两种情形下输出信息的时候要略微不同,在cli方式下运行,输出信息的分行一般使用回车就够了,而在web下浏览的时候,还要多加上一个
;最后得到参数的方式不同,cli下可以直接取argv数组,而web下则要通过$_GET数组。
那么有什么方法让我的脚本自动判断是处于哪种运行模式下,从而选择不同的处理方法呢?通过对比cli和web方式下phpinfo()反馈信息的不同,我发现基本可以用环境变量$ENV[""]来判断,当采用php -f方式执行的时候,$ENV[""]的值是/usr/bin/php,即执行文件的名称,当设置了“#! /usr/bin/php”并运行xxx.php时,$ENV[""]的值是./xxx.php,也是执行文件的名称,最后在web方式下浏览的时候,$ENV[""]的值是/usr/sbin/apache2,即解析php文件并反馈信息的web服务器执行文件的名称。那么,基于这个环境变量的值,我们就可以判断出程序的运行模式,并选择不同的处理方法了。下面是一个简单例子的源代码(cli_web.php),输出结果为得到的所有命令行或者get参数。
#! /usr/bin/php
<?php
if ((‘/usr/bin/php’ == $_ENV["_"]) //php -r …
|| ($_SERVER["SCRIPT_FILENAME"] == $_ENV[\'_\'])) //chmod +x xxx.php and run itself
$is_cli = true;
else
$is_cli = false;
//Set line break string and argument array
if ($is_cli)
$s_br = “\\n”;
$ar = $_SERVER[\'argv\'];
unset($ar[0]); //self-name of this script
else
$s_br = “
\\n”;
$ar = $_GET;
$s = implode($s_br, $ar);
$s .= $s_br;
echo “Got arguments: $s_br$s”;
?>
上面的代码在cli模式下运行结果为:
$ ./cli_web.php a b c d
Got arguments:
a
b
c
d
在web浏览方式下返回html代码为(访问形式为http://…../cli_web.php?a=1&b=2):
#! /usr/bin/php
Got arguments:
1
2
基本达到设计要求,只是web浏览方式下的“#! /usr/bin/php”不知怎么才能去掉,它不在<?php ?>包含范围内,无法使用ob_clean()清除,希望哪位路过的达人不吝赐教。 参考技术A 一般的网站都不会提供给你这个功能的,否则安全性会收到外界的威胁。
如果是自己的网站,可以在后台cgi编程时,运行编入进去的SH脚本,不赞成这样做。 参考技术B 必须要你网站支持这个脚本才可以,很多网站都是静态的,不支持代码运行的饿。
ubuntu 下执行shell脚本的问题
将一个脚本保存为带有扩展名的文件,如test.sh,在终端上输入: chmod +x test.sh然后输入: test.sh终端显示: test.sh 找不到命令 但是,如果在终端上输入: ./test.sh就能运行成功。另外,如果脚本文件没有扩展名的话,在终端上输入: ./test 或者 test脚本都能执行成功,这是为什么呢? 当然,如果不想输入chmod那一行命令的话,也可以直接执行,直接在终端上输入:/bin/sh test或者/bin/sh test.sh
参考技术A 诶!你还要去好好去玩一下Linux(不要用图形系统),你问的这些问题,真不好解释1,chmod +x test.sh:将test.sh变成可执行权限。
2,test.sh 第一行有"#!/bin/sh” 告诉解释器在什么位置。
3,第一步test.sh变成可执行了,./test.sh(运行当前目录下一个可执行文件,这是一个shell脚本,需要解释器,如果有"#!/bin/sh”通过sh解释,如果没有会报错没这个命令)。
4,./test.sh(第三步我以解释什么意思);运行test.sh(将同过path路径去找这个命令,显然这个tesh.sh这个文件不在你path路径下,你怎么能运行呢)。
5,sh test.sh(sh在/bin目录下也就是已经假如path路径,用sh命令解释你这个脚本)本回答被提问者和网友采纳 参考技术B export PATH=.:$PATH
add . to system PATH variable, so system will search command starting from current directory.
You can also add the "export" line to $HOME/.bashrc, so it works always...
以上是关于怎么在网站上运行SH脚本的主要内容,如果未能解决你的问题,请参考以下文章
sh 从终端/ shell /命令行/命令提示符下载Oracle网站上的JDK / JRE / Java二进制文件的脚本
sh 从终端/ shell /命令行/命令提示符下载Oracle网站上的JDK / JRE / Java二进制文件的脚本