百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> PHP通报数组格局参数到shell足本中
分享文章到:

PHP通报数组格局参数到shell足本中

发布时间:09/01 来源:未知 浏览: 关键词:

PHP中传递相似于“数组”格局数据到shell足本中:

模拟场景1

运算绑缚商品的价钱,绑缚商品中包括多个商品,这个商品是不肯定的,我们临时定义为iphone、栗子、香蕉,价钱离别为8元/斤、10元/斤、3元/斤,重量规格定为500g,我们把价钱当做参数传递给shell足本运算总价钱
以下是关于PHP部分的代码:

$prices = array(
    "apple"    => 8,
    "banana"   => 3,
    "chestnut" => 10
);

$command = "bash ".ROOT_PATH."/script/test.sh ";
foreach ($prices as $price) {
    $command .= $price." ";
}
$output = array();
$ret = 1;
exec($command." 2>&1", $output, $ret);
var_dump($command, $output, $ret);exit;
// command命令为:
// bash /data/home/tina/script/test.sh 8 3 10

下面是关于test.sh足本内容:

#!/bin/bash

all=0
for price in $@
do
    all=`expr ${all} + ${price}`
done
echo ${all}

模拟场景2

在场景1的状况下,我们修改价钱为浮点数,iphone、栗子、香蕉价钱离别为8.8元/斤、9.9元/斤、3.5元/斤,expr表达式会报错(expr: 参数数目错误),expr不支撑浮点类型,这里应当采纳bc或者awk,shell足本修改如下:

#!/bin/bash

all=0
for price in $@
do
    #all=$(echo ${price}+${all}|bc)
    all=$(awk "BEGIN{print ${all}+${price}}")
done
echo ${all}

模拟场景3

在场景2的根基上,绑缚商品此刻需要变动重量,iphone0.5KG、香蕉1KG、栗子1.5KG,则运算价钱时,我们也需要把重量的参数传递到shell足本中,才能运算价钱。
方案一:连续把这些参数加在足本之后,把参数个数一分为二,我们知道前面一半部分为价钱参数,后半段参数为重量参数,修改如下:
PHP代码部分:

$prices = array(
    "apple"    => 8.8,
    "banana"   => 3.5,
    "chestnut" => 9.9
);
$weights = array(
    "apple"    => 1,
    "banana"   => 2,
    "chestnut" => 3
);

$command = "bash ".ROOT_PATH."/script/test.sh ";
foreach ($prices as $price) {
    $command .= $price." ";
}
foreach ($weights as $weight) {
    $command .= $weight." ";
}

$output = array();
$ret = 1;
exec($command." 2>&1", $output, $ret);
var_dump($command, $output, $ret);exit;
// command命令为:
// bash /data/home/tina/script/test.sh 8.8 3.5 9.9 1 2 3

修改的shell足本为:

#!/bin/bash

all=0
count=`expr ${#} / 2`
countIndex=`expr ${count} + 1`

for price in ${@:1:${count}}
do
    #all=$(echo "${price}*${!countIndex}+${all}"|bc)
    all=$(awk "BEGIN{print ${all}+${price}*${!countIndex}}")
    countIndex=`expr ${countIndex} + 1`
done
echo ${all}

方案二:把这两种数据停止分组,就相似于PHP的数组一样,这样需要在命令中将每组参数离别用单引号包裹,这样shell则会认为只要两个参数,再在shell足本中当做数组来处置,修改如下:
PHP部分:

$prices = array(
    "apple"    => 8.8,
    "banana"   => 3.5,
    "chestnut" => 9.9
);
$weights = array(
    "apple"    => 1,
    "banana"   => 2,
    "chestnut" => 3
);

$command = "bash ".ROOT_PATH."/script/test.sh '"; //增加单引号
foreach ($prices as $price) {
    $command .= $price." ";
}
$command = trim($command) . "' '";  //增加单引号
foreach ($weights as $weight) {
    $command .= $weight." ";
}
$command = trim($command) . "'";  //增加单引号
$output = array();
$ret = 1;
exec($command." 2>&1", $output, $ret);
var_dump($command, $output, $ret);exit;
// command命令为:
// bash /data/home/tina/script/test.sh '8.8 3.5 9.9' '1 2 3'

shell足本修改为:

#!/bin/bash

all=0
index=0
prices=(${1})
weights=(${2})

for price in ${prices[@]}
do
    all=$(awk "BEGIN{ print ${price}*${weights[${index}]}+${all} }")
    index=`expr ${index} + 1`
done
echo $all

对照于方案一和方案二,从长远看,个人认为还是方案二占优势一些,易于区分:可以明显知道第一个参数是价钱组,第二个参数是重量组,可扩展:例如后续还要增添一个折扣率的参数(折扣率离别为0.9、0.88、0.95),优待券跌价5元等;
关于方案一,这个count的值是不牢固的,折扣率运算的话,假定每个水果品种都有独自的折扣率,则这个count还是3的倍数,把除以2修改为除以3就可以

#command命令为:
bash /data/home/tina/script/test.sh 8.8 3.5 9.9 1 2 3 0.9 0.88 0.95

但是关于优待券来说,那必定是对这个绑缚商品的团体优待了,就是独自的一个参数,假定优待券为5元,连续追加参数

#command命令为:
bash /data/home/tina/script/test.sh 8.8 3.5 9.9 1 2 3 0.9 0.88 0.95 5

这个时候也已经不好区分了,一连串数字,不利于后续保护,接手的人必定一脸懵逼,这都是些什么参数啊,然后内心开端一阵吐槽,方案一想想方法也能修改count=(参数个数-1)/3,不外如果后面还有其他的需求,这个逻辑又要修改,很烦额,关于方案二,则不消修改之前的逻辑,只用追加就行,不消修改之前的逻辑,足本就不写了,这只是举个栗子。

其实,由于工作需要,才接触到要写shell足本,初次看到一脸懵逼,这个场景也是模拟的,实际上是要对大大量的大文件停止处置,然后边学边看,发明这些命令超级……如何说呢?感受就像发明了新大陆,功效强大……

记载第一次写shell足本,嗯,就这酱紫(emmmmm……足本未做容错处置)……


再补充学到的几个简便的命令,不克不及忘了……
1 dos2unix 将Windows下文件中的换行键转换成Unix下的换行键(可使用Notepad++编纂器看到window下为换行符为CR LF,unix下的换行符为LF)
2 sort 对文件依照指定规则停止排序
3 comm 将两个有序文件停止对照,可以取到差集、交集(功效很强大,然后两个文件必需是有序的,不然会报错,也就是上个sort命令排序过的文件)
4 wc 统计文件行数(其实就是统计换行符)
5 $@ 足本的所有参数
6 $# 足本参数个数
7 ${@:1:4} 指代足本参数从1开端至第4个(可以范畴选中)

更多PHP相关技术文章,请拜访PHP教程栏目停止学习!

以上就是PHP传递数组格局参数到shell足本中的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板