我試圖在bash上運行批處理以從csv運行ping和snmp,並存儲結果或者響應或不在記事本。Unix - 運行PING和SNMP從文件到文件的Bash代碼*編輯*
文件標識單列CSV與每個服務器,並運行平,審查,運行SNMP,審覈,存儲和移動每個文件
到服務器的連接工作,但劇本一直在缺少失敗線#26錯誤/usr/tmp/testing_script.sh下:第26行:語法錯誤:文件從這裏
更新的意外結束。我已經做了一些改進,但仍然與這一個掙扎。 這是我到目前爲止的地方。
#!/bin/bash
nombrep="pin_"$hostname
nombres="smmp_"$hostname
file="/usr/tmp/devices.csv"
OLDIFS=$IFS
IFS=","
cat "$file" | while read col1; do
{
DNSRes=0
ping -q -c3 $col1 >> /usr/tmp/pin
grep " 100% packet loss" /usr/tmp/pin
if [ $? -eq 0 ]; then
echo $col1"," >> /usr/tmp/pin_fail
hostname >> /usr/tmp/pin_fail
echo -e "\n" >> /usr/tmp/pin_fail
fi
grep "unknown host" /usr/tmp/pin
if [ $? -eq 0 ]; then
echo $col1"," >> /usr/tmp/No_DNS
echo -e "\n" >> /usr/tmp/No_DNS
fi
if [ -e /usr/tmp/pin ]; then
rm /usr/tmp/pin
fi
if [ $DNSRes -eq 0 ]; then
snmp ********** $col1 1.3.6.1.2.1.1.3.0 >> /usr/tmp/smmp
grep "No response" /usr/tmp/smmp
if [ $? -eq 0 ]; then
echo -n $col1"," >> /usr/tmp/smmp_fail
hostname >> /usr/tmp/smmp_fail
echo -e "\n" >> /usr/tmp/smmp_fail
fi
fi
if [ -e /usr/tmp/smmp ]; then
rm -r /usr/tmp/smmp
fi
}
done
IFS=$OLDIFS
if [ -e /usr/tmp/pin__fail ]; then
mv /usr/tmp/pin_fail > /usr/tmp/$nombrep
fi
if [ -e /usr/tmp/smmp_fail ]; then
mv /usr/tmp/smmp_fail > /usr/tmp/$nombres
fi
exit 0;
而且我加入從那裏我目前正在運行的這bash腳本這是一個窗口膩子接口
echo on
pscp.exe -p -q -batch -pw #password# c:\logs\devices_gtn.csv #username#@host:/usr/tmp
pscp.exe -p -q -batch -pw #password# c:\logs\testing_script.sh #username#@host:/usr/tmp
plink.exe -pw #password# #username#@host "chmod 777 /usr/tmp/testing_script.sh"
plink.exe -pw #password# #username#@host "chmod 777 /usr/tmp/devices.csv"
plink.exe -v -pw #password# #username#@host "bash /usr/tmp/testing_script.sh"
del /f /q c:\logs\No_DNS.csv
pscp.exe -p -q -batch -pw #password# #username#@host:/usr/tmp/pin* c:\logs\
pscp.exe -p -q -batch -pw #password# #username#@host:/usr/tmp/smmp* c:\logs\
pscp.exe -p -q -batch -pw #password# #username#@host:/usr/tmp/No_DNS* c:\logs\No_DNS.csv
plink.exe -pw #password# #username#@host "rm -r /usr/tmp/pin*"
plink.exe -pw #password# #username#@host "rm -r /usr/tmp/smmp*"
plink.exe -pw #password# #username#@host "rm -r /usr/tmp/devices*"
plink.exe -pw #password# #username#@host "rm -r /usr/tmp/testing*"
plink.exe -pw #password# #username#@host "rm -r /usr/tmp/No_DNS*"
if not exist results (
md results)
if exist c:\logs\results\snmp_results.csv (
del /f /q c:\logs\results\snmp_results.csv)
if exist c:\logs\results\ping_results.csv (
del /f /q c:\logs\results\ping_results.csv)
if exist pin_host (
type pin_host >> c:\logs\results\ping_results.csv)
if not exist c:\logs\results\ping_results.csv (
echo "ping success" >> c:\logs\results\ping_results.csv)
if not exist results (
md results)
if exist smmp_host (
type smmp_host >> c:\logs\results\snmp_results.csv)
if not exist c:\logs\results\snmp_results.csv (
echo "snmp success" >> c:\logs\results\snmp_results.csv)
if exist c:\logs\No_DNS.csv (
start notepade.exe "c:\logs\results\No_DNS.csv")
start notepad.exe "c:\logs\results\ping_results.csv"
start notepad.exe "c:\logs\results\snmp_results.csv"
del /f /q c:\logs\smmp*.*
del /f /q c:\logs\pin*.*
exit
因爲它是不工作的CMD文件。代碼似乎沒有問題,因爲當我從服務器本身手動執行代碼時,它部分工作,除了某些問題從csv文件中檢索信息。
所以我對這個失明,因爲我不知道什麼是失敗。
任何幫助將不勝感激!
這是一個令人費解的語法錯誤,嘗試將'[$?'改爲'[$?',同樣將'0]改爲'0]'。方括號是令牌,需要遵循/在前面有一個空格才能正確解釋。 – jon 2015-03-02 15:27:33
在揹包之後或之前添加一個空間似乎沒有工作。關於#26 – tanoMandanga 2015-03-02 15:32:01
''的語法錯誤保持回來'而讀$ col1'應該是'while col1'。 – 2015-03-02 15:52:28