我有以下.sh文件我拼湊出了我在互聯網上找到的東西。
目標是讀取CSV文件中的第二行第二項並使用它發送刪除命令給elasticsearch。在腳本內部運行curl時出錯(沒有這樣的文件或目錄)
#!/bin/sh
OLDIFS=$IFS
IFS=,
function quit {
echo "Quitting Script"
IFS=$OLDIFS
exit 1
}
function fileExists {
if [ ! -f "$1" ]
then
echo "File $1 does not exists"
quit
fi
echo "File Name: $1"
}
function work {
linesToSkip=1
{
for ((i=$linesToSkip;i--;)) ;do
read
done
#Read 2nd item of the 2nd line of CSV file to get PROGRAMURL
read INDEX PROGRAMURL JUNK
echo "$PROGRAMURL"
QUERY="curl -XDELETE http://127.0.0.1:9200/cj/_query -d '{ \"query\" : { \"match\" : { \"PROGRAMURL\" : "$PROGRAMURL" } } }'"
$("$QUERY")
#RESPONSE=`$QUERY`
#echo $RESPONSE
} < $1
}
fileExists $1
work $1
IFS=$OLDIFS
除了執行curl腳本以外的所有東西都可以使用。我已經用$(),backtics,exec來試用它,我無法使它工作。
以下是錯誤當我運行的bash -vx script.sh:
bash -vx ./deleteExisting.sh catalog.csv
#!/bin/sh
OLDIFS=$IFS
+ OLDIFS='
'
IFS=,
+ IFS=,
function quit {
echo "Quitting Script"
IFS=$OLDIFS
exit 1
}
function fileExists {
if [ ! -f "$1" ]
then
echo "File $1 does not exists"
quit
fi
echo "File Name: $1"
}
function work {
linesToSkip=1
{
for ((i=$linesToSkip;i--;)) ;do
read
done
#Read 2nd item of the 2nd line of CSV file to get PROGRAMURL
read INDEX PROGRAMURL JUNK
echo "$PROGRAMURL"
QUERY="curl -XDELETE http://127.0.0.1:9200/cj/_query -d '{ \"query\" : { \"match\" : { \"PROGRAMURL\" : "$PROGRAMURL" } } }'"
$("$QUERY")
#RESPONSE=`$QUERY`
#echo $RESPONSE
} < $1
}
fileExists $1
+ fileExists catalog.csv
+ '[' '!' -f catalog.csv ']'
+ echo 'File Name: catalog.csv'
File Name: catalog.csv
work $1
+ work catalog.csv
+ linesToSkip=1
+ ((i=1))
+ ((i--))
+ read
+ ((1))
+ ((i--))
+ read INDEX PROGRAMURL JUNK
+ echo '"http://www.website.com"'
"http://www.website.com"
+ QUERY='curl -XDELETE http://127.0.0.1:9200/cj/_query -d '\''{ "query" : { "match" : { "PROGRAMURL" : "http://www.website.com" } } }'\'''
"$QUERY")
"$QUERY"
++ 'curl -XDELETE http://127.0.0.1:9200/cj/_query -d '\''{ "query" : { "match" : { "PROGRAMURL" : "http://www.website.com" } } }'\'''
./deleteExisting.sh: line 29: curl -XDELETE http://127.0.0.1:9200/cj/_query -d '{ "query" : { "match" : { "PROGRAMURL" : "http://www.website.com" } } }': No such file or directory
IFS=$OLDIFS
+ IFS='
'
例CSV文件將
INDEX, PROGRAMURL, other, info
"1", "http://website.com", "other info", "information"
不要試圖形成一個命令串出和變量的作品。使用*功能*。 –
你能詳細解釋一下嗎? – Brad
@ n.m。即使使用函數,在shell腳本中的某個時刻,通常也必須將事物粘合在一起......這通常可能是一個指示器,可能是考慮Python等另一種語言的時候了 – 6EQUJ5