奥门新浦京官方网站在 Linux 命令行中使用和执行 PHP 代码

PHP是三个开源服务器端脚本语言,最先那八个字母代表的是“Personal Home
Page”,近些日子天则意味着的是“PHP:Hypertext
Preprocessor”,它是个递归首字母缩写。它是三个跨平台脚本语言,深受C、C++和Java的震慑。

作者:qinjx
原版的书文地址:Shell脚本编制程序30分钟入门

奥门新浦京官方网站 1

什么是Shell脚本

在 Linux 命令行中运行 PHP 代码

示例

看个例子吗:

#!/bin/sh
cd ~
mkdir shell_tut
cd shell_tut

for ((i=0; i<10; i++)); do
    touch test_$i.txt
done

PHP的语法和C、Java以致含有一点点PHP天性的Perl形成语言中的语法拾壹分相近,它马上大致正被2.6亿个网址所选拔,当前新星的安居版本是PHP版本5.6.10。

演示解释

  • 第1行:钦命脚本解释器,这里是用/bin/sh做解释器的
  • 第2行:切换来当下客商的home目录
  • 第3行:创立二个目录shell_tut
  • 第4行:切换到shell_tut目录
  • 第5行:循环条件,意气风发共循环12次
  • 第6行:成立二个test_1…10.txt文件
  • 第7行:循环体甘休

cd, mkdir, touch都以系统自带的顺序,日常在/bin可能/usr/bin目录下。for,
do, done是sh脚本语言的重大字。

PHP是HTML的停放脚本,它有支持开辟人士急速写出动态变化的页面。PHP首要用来服务器端(而Javascript则用来客商端)以通过HTTP生成动态网页,可是,当您通晓能够在Linux终端中无需网页浏览器来实行PHP时,你恐怕会大为惊讶。

shell和shell脚本的概念

shell是指后生可畏种应用程序,这一个应用程序提供了三个分界面,客户通过那么些分界面访谈操作系统内核的劳动。Ken
汤普森的sh是率先种Unix Shell,Windows
Explorer是三个独立的图形分界面Shell。

shell脚本(shell
script),是黄金时代种为shell编写的台本程序。产业界所说的shell平时都以指shell脚本,但读者对象要明了,shell和shell
script是多个不一样的概念。由于习于旧贯的原由,简洁起见,本文现身的“shell编制程序”都以指shell脚本编制程序,不是指开辟shell本身(如Windows
Explorer扩充开采)。

奥门新浦京官方网站,正文将解说PHP脚本语言的命令行方面。

环境

shell编制程序跟java、php编制程序同样,只要有叁个能编写代码的文本编辑器和二个能讲明执行的本子解释器就能够了。

1. 在装置完PHP和Apache2后,大家供给设置PHP命令行解释器。

OS

最近主流的操作系统都协助shell编制程序,本文档所述的shell编制程序是指Linux下的shell,讲的着力都以POSIX规范下的法力,所以,也适用于Unix及BSD(如Mac
OS)。

# apt-get install php5-cli          [Debian 及类似系统]
# yum install php-cli               [CentOS 及类似系统]

Linux

Linux暗许安装就带了shell解释器。

接下去大家普通要做的是,在/var/www/html(这是 Apache2
在大部发行版中的职业目录)那么些地点创设七个剧情为 <?php phpinfo(卡塔尔(قطر‎;
?>,名称叫 infophp.php
的文件来测量试验(PHP是不是安装精确),实践以下命令就可以。

Mac OS

Mac
OS不止带了sh、bash那四个最底子的解释器,还放置了ksh、csh、zsh等一时用的解释器。

# echo '<?php phpinfo(); ?>' > /var/www/html/infophp.php

Windows上的模拟器

windows出厂时从没内置shell解释器,必要活动安装,为了相同的时候能用grep, awk,
curl等工具,最棒装三个cygwin或然mingw来模拟linux意况。

  • cygwin
  • mingw

然后,将浏览器访谈
,那将会在网络浏览器中开荒该文件。

本子解释器

奥门新浦京官方网站 2

sh

即Bourne shell,POSIX(Portable Operating System
Interface)标准的shell解释器,它的二进制文件路线日常是/bin/sh,由BellLabs开拓。

本文讲的是sh,假诺您采用别的语言用作shell编制程序,请自行参照他事他说加以考察相应语言的文书档案。

检查PHP信息

bash

Bash是Bourne shell的替代品,属GNU
Project,二进制文件路线经常是/bin/bash。产业界日常混用bash、sh、和shell,举个例子你会时时在选聘运行技术员的文案中看见:熟练Linux
Bash编制程序,明白Shell编制程序。

在CentOS里,/bin/sh是二个指向/bin/bash的标志链接:

[root@centosraw ~]# ls -l /bin/*sh
-rwxr-xr-x. 1 root root 903272 Feb 22 05:09 /bin/bash
-rwxr-xr-x. 1 root root 106216 Oct 17  2012 /bin/dash
lrwxrwxrwx. 1 root root      4 Mar 22 10:22 /bin/sh -> bash

但在Mac
OS上不是,/bin/sh和/bin/bash是八个例外的文书,就算它们的大大小小只相差100字节左右:

iMac:~ wuxiao$ ls -l /bin/*sh
-r-xr-xr-x  1 root  wheel  1371648  6 Nov 16:52 /bin/bash
-rwxr-xr-x  2 root  wheel   772992  6 Nov 16:52 /bin/csh
-r-xr-xr-x  1 root  wheel  2180736  6 Nov 16:52 /bin/ksh
-r-xr-xr-x  1 root  wheel  1371712  6 Nov 16:52 /bin/sh
-rwxr-xr-x  2 root  wheel   772992  6 Nov 16:52 /bin/tcsh
-rwxr-xr-x  1 root  wheel  1103984  6 Nov 16:52 /bin/zsh

无需别的浏览器,在Linux终端中也足以获得同样的结果。在Linux命令行中执行/var/www/html/infophp.php,如:

高档编程语言

谈论上讲,只要一门语言提供问询释器(而不止是编写翻译器),那门语言就足以胜任脚本编制程序,不以为奇的解释型语言都是足以视作脚本编制程序的,如:Perl、Tcl、Python、PHP、Ruby。Perl是最知名的脚本编制程序语言了,Python近几年也成了有个别linux发行版的预置解释器。

编写翻译型语言,只要有解释器,也得以用作脚本编制程序,如C
shell是放到的(/bin/csh),Java有第三方解释器Jshell,Ada有收取费用的解释器AdaScript。

正如是二个PHP Shell Script示例(假使文件名称叫test.php):

#!/usr/bin/php
<?php
for ($i=0; $i < 10; $i++)
        echo $i . "n";

执行:

/usr/bin/php test.php

或者:

chmod +x test.php
./test.php
# php -f /var/www/html/infophp.php

哪些抉择shell编制程序语言

奥门新浦京官方网站 3

熟悉 vs 陌生

设若你已经调节了一门编制程序语言(如PHP、Python、Java、JavaScript),提议您就间接利用那门语言编写脚本程序,尽管有些地点会有一点点啰嗦,但您能选取在此门语言领域里的经验(单元测验、单步调试、IDE、第三方类库)。

增加生产总量的读书花销相当的小,只要学会怎么选择shell解释器(Jshell、AdaScript)就能够了。

从命令行检查PHP信息

简单 vs 高级

一旦你以为温馨熟知的语言(如Java、C)写shell脚本实在太啰嗦,你只是想做一些备份文件、安装软件、下载数据等等的政工,学着使用sh,bash会是四个好主意。

shell只定义了贰个非常轻松的编制程序语言,所以,假诺你的本子程序复杂度较高,大概要操作的数据构造相比复杂,那么照旧应当利用Python、Perl那样的脚本语言,只怕是您本来就曾经很专长的高端级语言。因为sh和bash在此上头很弱,例如说:

  • 它的函数只可以回到字串,不可能回去数组
  • 它不扶助面向对象,你不恐怕落到实处部分高贵的设计格局
  • 它是解释型的,黄金年代边解释生机勃勃边实践,连PHP那种预编写翻译都不是,要是您的台本包含错误(举个例子调用了不设有的函数卡塔尔(قطر‎,只要没施行到那后生可畏行,就不会报错

由于出口结果太大,我们可以由此管道将上述输出结果输送给 less
命令,那样就能够一遍输出大器晚成屏了,命令如下:

条件包容性

尽管您的脚本是提必要别的客商使用,使用sh或然bash,你的剧本将具有最佳的境而且容性,perl很已然是linux标配了,python这几年也成了有些linux发行版的标配,至于mac
os,它暗中同意安装了perl、python、ruby、php、java等主流编制程序语言。

# php -f /var/www/html/infophp.php | less

第一个shell脚本

奥门新浦京官方网站 4

编写

张开文本编辑器,新建贰个文书,扩张名叫sh(sh代表shell),扩张名并不影响脚本实施,见名知意就好,假若您用php写shell
脚本,扩充名就用php好了。

输入一些代码,第大器晚成行平日是那般:

#!/bin/bash
#!/usr/bin/php

“#!”是叁个预约的暗号,它告诉系统那几个本子要求怎么着解释器来举行。

检查有着PHP消息

运行

运转Shell脚本有三种办法:

那边,‘-f‘选项深入分析并试行命令后紧跟着的公文。

用作可执路程序

chmod +x test.sh
./test.sh

小心,必供给写成./test.sh,并非test.sh,运营其余二进制的程序也风度翩翩律,直接写test.sh,linux系统会去PATH里找找有没有叫test.sh的,而唯有/bin,
/sbin,
/usr/bin,/usr/sbin等在PATH里,你的当前目录平日不在PATH里,所以写成test.sh是会找不到命令的,要用./test.sh告诉系统说,就在当前目录找。

因此这种方法运维bash脚本,第大器晚成行确定要写对,好让系统查找到准确的解释器。

此地的”系统”,其实正是shell那么些应用程序(想象一下Windows
Explorer),但自身有意写成种类,是有助于清楚,既然这些系统正是指shell,那么一个运用/bin/sh作为解释器的脚本是还是不是足以节省第意气风发行吧?是的。

2.
我们能够一贯在Linux命令行使用phpinfo(卡塔尔(قطر‎那几个极度有价值的调理工科具而无需从文件来调用,只需实行以下命令:

作为解释器参数

这种运营情势是,间接运维解释器,其参数正是shell脚本的文本名,如:

/bin/sh test.sh
/bin/php test.php

这种措施运转的剧本,无需在率先行钦点解释器消息,写了也没用。

# php -r 'phpinfo();'

变量

奥门新浦京官方网站 5

概念变量

概念变量时,变量名不加欧元符号($),如:

your_name="qinjx"

瞩目,变量名和等号之间不可能有空格,那大概和你纯熟的有着编制程序语言都不朝气蓬勃致。

除开显式地平昔赋值,还能够用语句给变量赋值,如:

for file in `ls /etc`

PHP调节和测验工具

接收变量

运用二个概念过的变量,只要在变量名前边加美金符号就能够,如:

your_name="qinjx"
echo $your_name
echo ${your_name}

变量名外面包车型客车花括号是可选的,加不加都行,加花括号是为了帮扶解释器识别变量的边际,比方上边这种境况:

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

假诺不给skill变量加花括号,写成echo “I am good at
$skillScript”,解释器就能够把$skillScript当成一个变量(其值为空),代码实施结果就不是大家期待的样子了。

推荐给具备变量加上花括号,这是个好的编制程序习贯。AMDliJ IDEA编写shell
script时,IDE就能够唤起加花括号。

此处,‘-r‘ 选项会让PHP代码在Linux终端中不带<和>标识直接试行。

重定义变量

已定义的变量,能够被再次定义,如:

your_name="qinjx"
echo $your_name

your_name="alibaba"
echo $your_name

那样写是合法的,但只顾,第叁遍赋值的时候不能写$your_name=”alibaba”,使用变量的时候才加比索符。

3. 以相互形式运维PHP并做一些数学生运动算。这里,‘-a‘
选项用于以相互影响情势运作PHP。

注释

以“#”早前的行就是注释,会被解释器忽视。

# php -a

Interactive shell

php > echo 2+3;
5
php > echo 9-6;
3
php > echo 5*4;
20
php > echo 12/3;
4
php > echo 12/5;
2.4
php > echo 2+3-1;
4
php > echo 2+3-1*3;
2
php > exit

多行注释

sh里未有多行注释,只好每风流倜傥行加二个#号。就像这么:

#--------------------------------------------
# 这是一个自动打ipa的脚本,基于webfrogs的ipa-build书写:https://github.com/webfrogs/xcode_shell/blob/master/ipa-build

# 功能:自动为etao ios app打包,产出物为14个渠道的ipa包
# 特色:全自动打包,不需要输入任何参数
#--------------------------------------------

##### 用户配置区 开始 #####
#
#
# 项目根目录,推荐将此脚本放在项目的根目录,这里就不用改了
# 应用名,确保和Xcode里Product下的target_name.app名字一致
#
##### 用户配置区 结束  #####

假若在支付进程中,碰着大段的代码必要临时注释起来,过会儿又撤除注释,如何是好呢?每意气风发行加个#标志太忙绿了,能够把那风华正茂段要解说的代码用风姿罗曼蒂克对花括号括起来,定义成二个函数,未有地方调用这么些函数,那块代码就不会施行,到达了和注释相近的法力。

输入 ‘exit‘ 只怕按下 ‘ctrl+c‘ 来关闭PHP交互作用方式。

字符串

字符串是shell编制程序中最常用最得力的数据类型(除了数字和字符串,也没啥别的类型好用了,哈哈),字符串能够用单引号,也足以用双引号,也可以毫不引号。单双引号的分别跟PHP相通。

奥门新浦京官方网站 6

单引号

str='this is a string'

单引号字符串的范围:

  • 单引号里的其余字符都会原样输出,单引号字符串中的变量是不行的
  • 单引号字串中不能够现身单引号(对单引号使用转义符后也非常)

启用PHP人机联作格局

双引号

your_name='qinjx'
str="Hello, I know your are "$your_name"! n"
  • 双引号里能够有变量
  • 双引号里能够现身转义字符

4.
您能够独自将PHP脚本作为shell脚本来运维。首先,创立在您当前工作目录中开创二个PHP样例脚本。

字符串操作

# echo -e '#!/usr/bin/php/n<?php phpinfo(); ?>' > phpscript.php

拼接字符串

your_name="qinjx"
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"

echo $greeting $greeting_1

留神,大家在该PHP脚本的首先行使用#!/usr/bin/php,就疑似在shell脚本中那么(/bin/bash)。第黄金时代行的#!/usr/bin/php告诉Linux命令行用
PHP 解释器来深入分析该脚本文件。

得到字符串长度:

string="abcd"
echo ${#string} #输出:4

附带,让该脚本可施行:

领取子字符串

string="alibaba is a great company"
echo ${string:1:4} #输出:liba
# chmod 755 phpscript.php

查找子字符串

string="alibaba is a great company"
echo `expr index "$string" is`#输出:8,这个语句的意思是:找出单词is在这名话中的位置

随着来运作它,

更多

参见本文书档案末尾的参照他事他说加以考察资料中Advanced Bash-Scripting Guid Chapter
10.1

# ./phpscript.php

数组

5.
您能够完全靠本身通过相互作用shell来创建轻松函数,那你早晚上的集会被惊到了。上面是稳中求进的指南。

管道

开启PHP人机联作格局。

原则判别

# php -a

流程序调节制

和Java、PHP等语言分歧等,sh的流水生产线调节不可为空,如:

<?php
if (isset($_GET["q"])) {
    search(q);
}
else {
    //do nothing
}

在sh/bash里可不能够那样写,假使else分支未有说话推行,就无须写那一个else。

还要注意,sh里的if [ $foo -eq 0
],这些方括号跟Java/PHP里if前面包车型地铁圆括号大不相仿,它是贰个可执路程序(和cd,
ls, grep雷同),想不到啊?在CentOS上,它在/usr/bin目录下:

ll /usr/bin/[
-rwxr-xr-x. 1 root root 33408 6月  22 2012 /usr/bin/[

正因为方括号在这里边是叁个可执路程序,方括号前边总得加空格,无法写成if
[$foo -eq 0]

创建四个函数,将它取名称为 addition。同偶然候,申明多个变量 $a 和 $b。

if else

php > function addition ($a, $b)

if

if condition
then
    command1 
    command2
    ...
    commandN 
fi

写成一行(适用于极端命令提醒符):

if `ps -ef | grep ssh`;  then echo hello; fi

末尾的fi即是if倒过来拼写,前边还有也许会超出形似的

选择花括号来在当中为该函数定义准绳。

if else

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi
php > {

if else-if else

if condition1
then
    command1
elif condition2
    command2
else
    commandN
fi

概念法规。这里,该准绳讲的是增添那八个变量。

for while

php { echo $a + $b;

for

在开始比赛的示范里演示过了:

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

写成生机勃勃行:

for var in item1 item2 ... itemN; do command1; command2… done;

持有规行矩步定义完成,通过关闭花括号来封装准则。

C风格的for

for (( EXP1; EXP2; EXP3 ))
do
    command1
    command2
    command3
done
php {}

while

while condition
do
    command
done

测量试验函数,增多数字4和3,命令如下:

Infiniti循环

while :
do
    command
done

或者

while true
do
    command
done

或者

for (( ; ; ))
php > var_dump (addition(4,3));

until

until condition
do
    command
done

样例输出

7NULL

您能够运作以下代码来实行该函数,你能够测验分化的值,你想来多少次都行。将个中的
a 和 b 替换来你本人的值。

php > var_dump (addition(a,b));

php > var_dump (addition(9,3.3));

case

case "${opt}" in
    "Install-Puppet-Server" )
        install_master $1
        exit
    ;;

    "Install-Puppet-Client" )
        install_client $1
        exit
    ;;

    "Config-Puppet-Server" )
        config_puppet_master
        exit
    ;;

    "Config-Puppet-Client" )
        config_puppet_client
        exit
    ;;

    "Exit" )
        exit
    ;;

    * ) echo "Bad option, please choose again"
esac

case的语法和C
family语言差异极大,它必要三个esac(就是case反过来)作为达成标识,各种case分支用右圆括号,用四个分行表示break

样例输出

12.3NULL

奥门新浦京官方网站 7

创建PHP函数

您能够间接运维该函数,直至退出交互格局(ctrl+z)。同不时间,你也应当注意到了,下面输出结果中回到的数据类型为
NULL。那么些主题材料能够通过必要 php 人机联作 shell用 return 代替 echo
重回结果来修复。

只必要在上头的函数的中 ‘echo‘ 注解用 ‘return‘ 来替换

替换

php { echo $a + $b;

php { return $a + $b;

剩余的东西和法规如故同样。

那边是几个样例,在该样例的输出结果中回到了正确的数据类型。

奥门新浦京官方网站 8

PHP函数

恒久都念念不要忘记,客商定义的函数不会从一个shell会话保留到下一个shell会话,由此,大器晚成旦您退出交互作用shell,它就能够放弃了。

期望您垂怜本次教程。保持连线,你会博得更加多此类文章。保持关心,保持健康。请在上边包车型地铁评价中为我们提供有价值的反馈。点赞并分享,援助我们扩散。

函数

定义

调用

文本包罗

可以采纳source和.关键字,如:

source ./function.sh
. ./function.sh

在bash里,source和.是等效的,他们都以读入function.sh的内容并实行其剧情(相通PHP里的include),为了越来越好的可移植性,推荐应用第三种写法。

包含三个文书和试行三个文本后生可畏律,也要写那么些文件的门径,不能够光写文件名,举例上述例子中:

. ./function.sh

不得以编写:

. function.sh

设若function.sh是客商传入的参数,怎么样获取它的相对路线呢?方法是:

real_path=`readlink -f $1`#$1是用户输入的参数,如function.sh
. $real_path

顾客输入

施行脚本时传出

本子运转中输入

select菜单

stdin和stdout

常用的一声令下

sh脚本结合系统命令便有了强压的威力,在字符管理领域,有grep、awk、sed三杀手,grep担负寻觅一定的行,awk能将行拆分成多少个字段,sed则足以兑现立异插入删除等写操作。

ps

翻开进程列表

grep

排除grep自身

寻找与target相邻的结果

awk

sed

插入

替换

删除

xargs

curl

简单来说案例

参照他事他说加以考察资料

  • Advanced Bash-Scripting
    Guide,非常详尽,非常易读,大量example,不只能够当入门教材,也足以看作工具书查阅
  • Unix Shell
    Programming
  • Linux Shell Scripting Tutorial – A Beginner’s
    handbook

发表评论

电子邮件地址不会被公开。 必填项已用*标注