我一直在bash中努力解析並將參數文件讀入多個gobal變量。我們同時運行HPUX和Linux環境,並試圖在BASH中實現這一目標。目前它給我在sed語句上的錯誤。即使當我取出sed時,在循環內部它會讀取變量,但只要我退出循環,值就會恢復爲全局定義。已經嘗試在文件的頂部添加「#!/ bin/sh」,但是這不起作用,就像HP8系統一樣。任何幫助,將不勝感激!BASH腳本:從1行文件讀入多個全局變量
set -xv
ReadStat() {
set -xv
while read EngName AllTabs Distribs DropDist BlockSet BlockExp BlockBy MaxProcs ; do
echo "read: EngName=$EngName AllTabs=$AllTabs Distribs=$Distribs DropDist=$DropDist BlockSet=$BlockSet BlockExp=$BlockExp BlockBy=$BlockBy MaxProcs=$MaxProcs "
done < sed -e "s/||/|-|/g" -e "s/||/|-|/g" -e "s/||/|-|/g" -e "s/|/ /g" $StatFile
#cat $StatFile |\
# sed -e "s/||/|-|/g" -e "s/||/|-|/g" -e "s/||/|-|/g" |\
# sed -e "s/|/ /g" |\
# read EngName AllTabs Distribs DropDist BlockSet BlockExp BlockBy MaxProcs
}
# main() {
BaseNameIs=`basename $0 '.sh'`
StatFile=/tmp/kz.stat
EngName="it1xxx"
CronJob='Y'
Distribs='B'
DropDist='N'
AllTabs='N'
BlockSet='N'
# BlockExp=`date '+%Y%m%d%H%M'`
BlockExp=`date '+%Y%m%d'`'0000'
BlockBy='none'
MaxProcs=30
MyHost=`hostname`
ReadStat
# main() }
輸入文件的樣子:
it1xxx|Y|B|N|Y|201401071110|none|30|
任何你想跳過BASH並使用Perl的機會? 'split(分割)'會在這樣的單線程上創造奇蹟......'我的($ EngName,$ CronJob,$ Distribs,$ DropDist,$ AllTabs,$ BlockSet,$ BlockExp,$ BlockBy,$ MaxProcs,$ MyHost) = split('|',$ lineIn); $ MyHost = defined($ MyHost)?$ MyHost:\'hostname \''... – abiessu
是不是他的第一個3'-e's在你的'sed -e「s/||/| - |/g 「-e」s/||/| - |/g「-e」s/||/| - |/g「-e」s/|// g「$ StatFile'重複?你只需要其中的一個,因爲你使用的是'g'。哦,當然,將'sed ..'送入重定向('<'),將需要進程替換,即。 '而...;完成<(sed ....)'或者<<(sed ...)'。或者移動sed以通過前面的管道餵食,'sed ... |雖然......「祝你好運。 – shellter
實際上,如果文件沒有值,則會出現這些文件。即使在全球範圍內,|||只會由第一位替補人員來固定,第二位替補人員會在第二位替補人員進入。第三個可能是多餘的。 – user3170886