亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP傳遞數組格式參數到shell腳本中

2020-03-22 17:44:47
字體:
來源:轉載
供稿:網友

PHP中傳遞類似于“數組”格式數據到shell腳本中:

模擬場景1

計算捆綁商品的價格,捆綁商品中包含多個商品,這個商品是不確定的,我們暫時定義為蘋果、栗子、香蕉,價格分別為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/bashall=0for price in $@do    all=`expr ${all} + ${price}`doneecho ${all}
模擬場景2

在場景1的情況下,我們修改價格為浮點數,蘋果、栗子、香蕉價格分別為8.8元/斤、9.9元/斤、3.5元/斤,expr表達式會報錯(expr: 參數數目錯誤),expr不支持浮點類型,這里應該采用bc或者awk,shell腳本修改如下:

#!/bin/bashall=0for price in $@do    #all=$(echo ${price}+${all}|bc)    all=$(awk "BEGIN{print ${all}+${price}}")doneecho ${all}
模擬場景3

在場景2的基礎上,捆綁商品現在需要變更重量,蘋果0.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/bashall=0count=`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`doneecho ${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/bashall=0index=0prices=(${1})weights=(${2})for price in ${prices[@]}do    all=$(awk "BEGIN{ print ${price}*${weights[${index}]}+${all} }")    index=`expr ${index} + 1`doneecho $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腳本中的詳細內容,更多請關注 其它相關文章!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美丰满片xxx777| 久久久久久免费精品| 国产精品热视频| 欧美性猛交xxxx黑人| 成人免费观看网址| 久久久久久999| 日韩成人网免费视频| 中文字幕一区二区三区电影| 国产91在线播放九色快色| 国产精品久久97| 亚洲欧美国产另类| 成人精品aaaa网站| 国产精品99久久久久久白浆小说| 国产成人avxxxxx在线看| 国模gogo一区二区大胆私拍| 国产精品久久久久免费a∨| 欧美精品在线免费观看| 亚洲男人第一网站| 一区二区三区视频免费| 91精品久久久久久久久久久久久久| 国产精品高潮呻吟久久av无限| 精品国产依人香蕉在线精品| 91色p视频在线| 国产欧美日韩中文字幕| 久久久999精品免费| 日韩在线视频网| 亚洲 日韩 国产第一| 亚洲图片制服诱惑| 在线日韩欧美视频| 成人av番号网| 亚洲精品一区中文| 欧美精品在线网站| 国产精品一区二区性色av| 亚洲国产中文字幕久久网| 欧美电影免费观看电视剧大全| 亚洲色在线视频| 久久视频国产精品免费视频在线| 亚洲精品成a人在线观看| 97国产精品久久| 日韩中文字幕在线视频| 亚洲欧美资源在线| 日韩一区二区福利| 日韩电影在线观看免费| 国产一级揄自揄精品视频| 亚洲欧美日韩网| 91系列在线观看| 日本精品一区二区三区在线播放视频| 26uuu国产精品视频| 国产精品日本精品| 8090成年在线看片午夜| 中文字幕精品一区久久久久| 亚洲v日韩v综合v精品v| 日本精品视频在线观看| 亚洲日本成人女熟在线观看| 97成人在线视频| 亚洲综合日韩在线| 久久婷婷国产麻豆91天堂| 亚洲老头同性xxxxx| 国产精品ⅴa在线观看h| 亚洲偷熟乱区亚洲香蕉av| 91精品久久久久久久久中文字幕| 亚洲精品一二区| 久久精品国产久精国产思思| 国产精品久久久久7777婷婷| 欧美性生交xxxxx久久久| 日本亚洲欧洲色| 亚洲人成绝费网站色www| 亚洲免费视频一区二区| 韩日欧美一区二区| 91网在线免费观看| 成人性生交大片免费看小说| 亚洲欧美国产精品| 成人黄色大片在线免费观看| 丝袜美腿精品国产二区| 国产精品青青在线观看爽香蕉| 国产香蕉一区二区三区在线视频| 中文字幕在线观看亚洲| 色诱女教师一区二区三区| 欧美亚洲成人网| 欧美高清视频一区二区| 深夜福利亚洲导航| 国产精品27p| 日韩黄色在线免费观看| 欧美极品少妇全裸体| 欧美剧在线观看| 精品久久久久久国产91| 社区色欧美激情 | 日韩视频亚洲视频| 亚洲美女视频网站| 国产精品久久久久久久久久免费| 亚洲电影天堂av| 91国产美女在线观看| 日韩美女av在线免费观看| 国产成人精品电影| 成人性生交xxxxx网站| 久久久免费精品视频| 亚洲精品在线不卡| 日韩大陆欧美高清视频区| 国产精品高潮粉嫩av| 欧美电影在线播放| 国产亚洲成av人片在线观看桃| 亚洲国产私拍精品国模在线观看| 成人写真福利网| 亚洲性69xxxbbb| 亚洲天堂第二页| 亚洲综合成人婷婷小说| 欧美日本中文字幕| 成人欧美在线视频| 欧美在线视频导航| 在线国产精品播放| 亚洲性av网站| 日韩欧美在线视频日韩欧美在线视频| 国产成人在线视频| 97久久精品人搡人人玩| 欧美成人在线影院| 成人乱色短篇合集| 欧美尤物巨大精品爽| 亚洲国产欧美精品| 色偷偷偷综合中文字幕;dd| 在线中文字幕日韩| 韩国视频理论视频久久| 青青久久av北条麻妃海外网| 日韩精品在线第一页| 亚洲精品在线不卡| 欧美激情国产精品| 国产成人精品电影久久久| 疯狂做受xxxx高潮欧美日本| 一本色道久久综合狠狠躁篇怎么玩| 日韩精品极品在线观看| 九九热最新视频//这里只有精品| 18一19gay欧美视频网站| 国产91精品久久久久久久| 国产欧美亚洲精品| 国产欧美在线看| 性欧美亚洲xxxx乳在线观看| 97在线观看视频| 亚洲精品成人久久电影| 精品亚洲一区二区三区在线播放| 国内精品小视频| 日本三级久久久| www.99久久热国产日韩欧美.com| 91经典在线视频| 亚洲香蕉伊综合在人在线视看| 日韩中文视频免费在线观看| 欧美性猛交xxxx乱大交极品| 国产成人精品免费视频| 中文字幕av一区二区三区谷原希美| 国产成人精品999| 国产黑人绿帽在线第一区| 久久久久久com| 亚洲香蕉av在线一区二区三区| 精品久久久久久久久久ntr影视| 亚洲精品福利在线| 久久精品国产亚洲| 欧美精品激情在线观看| 国产精品国产亚洲伊人久久| 国产99久久精品一区二区| 欧美乱大交做爰xxxⅹ性3| 国产精品久久9| 日本欧美一二三区| 日本一区二区三区在线播放| 久久久久免费视频| 亚洲人午夜精品免费| 日本高清视频精品|