2014-02-26 82 views
1
find /data/backup/ -name 20140202* -exec awk -F"|" '$23!=0 {print"|"$14"|"$23}' {}  
\; > Day1.txt 

host='XX.XX.XX.XX' 
user='root' 
passwd='root' 
(
echo "$user" 
echo "$passwd" 
echo "cd /data/" 
echo "find /data/backup/ -name rec20140202* -exec awk -F"|" '$23!=0 {print"|"$14"|"$23}' 
{} \; > remoteDay1.txt" 
echo "exit")| telnet "$host" 

在上面的代碼片段首先找到命令工作正常,但第二找到命令(遠程登錄部內部)產生以下錯誤:殼說「命令未找到」錯誤數據回送到一個telnet命令


testnew.sh: line 27: '3!=0 {print: command not found 
testnew.sh: line 27: 4: command not found 
testnew.sh: line 27: 3: command not found 
testnew.sh: line 27: }' {} \; > remoteDay1.txt: command not found 
Connection closed by foreign host. 

請幫助

回答

1

這是你的問題:

echo "find /data/backup/ -name rec20140202* -exec awk -F"|" '$23!=0 {print"|"$14"|"$23}' 

您將雙引號echo參數並在雙引號中使用-F「|」甚至在awk腳本中。然後 外殼試圖構建一個4-程序管相當於

echo "find /data/backup/ -name rec20140202* -exec awk -F" | 
" '$23!=0 {print"           | 
"$14"              | 
"$23}' {} \; > remoteDay1.txt" 

因爲殼的位置參數$1$2都是空的,你正是您所描述的錯誤。 如果你想在雙引號雙引號,需要轉義:包括引號

echo \"foo\" 

回聲"foo"。 請注意,沒有辦法用單引號字符串引用單引號。您還希望從外殼擴展中隱藏$23等。將它們轉義爲\$。我建議使用

echo "find ... -F\"|\" '\$23!=0 {print \"|\"\$14\"|\"\$23}' {} \;>remoteDay1.txt" 
相關問題