我有一个脚本,该脚本读取表文件并应该查找字符串。如果找到该字符串,则应解析在其上找到该字符串的行并执行一些操作。该脚本在第一次找不到字符串时退出。(文件的第一行。)表文件格式为:
10.1.1:0.0:lan:hq:3:254:br0:.1.16:.1.1:.1.21:.1.23:hq:eoc:hq
在while循环($ ip和$ ipad)之前,有给定变量的定义,以及日志和调试功能。我已经删除了所有使其难以阅读的项目(调试,日志记录,注释等)。while循环如下所示:
line=$(grep ${ipad} {$net})
if [ -z ${line}]; then
base=$(echo ${ip}|awk -F"." '{print $1"."$2}')
mask=$(echo ${line}|awk -F":" '{print $2}')
zone=$(echo ${line}|awk -F":" '{print $3}')
loc=$(echo ${line}|awk -F":" '{print $4}')
low=$(echo ${line}|awk -F":" '{print $5}')
high=$(echo ${line}|awk -F":" '{print $6}')
bri=$(echo ${line}|awk -F":" '{print $7}')
bftp=$(echo ${line}|awk -F":" '{print $8}')
ftp=${base}${bftp}
bgate=$(echo ${line}|awk -F":" '{print $9}')
gate=${base}${bgate}
bns=$(echo ${line}|awk -F":" '{print $10}')
bns1=$(echo ${line}|awk -F":" '{print $11}')
if [[ ${loc} == "var1" && ${zone} == "var2" ]]; then
ns=10.10${bns}
ns1=10.10${bns1}
else
ns=${base}${bns}
ns1=${base}${bns1}
fi
if [[ ${loc} == "var3" && ${zone} == "var2" ]]; then
ns=10.1${bns}
ns1=10.1${bns1}
else
ns=${base}${bns}
ns1=${base}${bns1}
fi
tld=$(echo ${line}|awk -F":" '{print $12}')
tld1=$(echo ${line}|awk -F":" '{print $13}')
com=$(echo ${line}|awk -F":" '{print $14}')
if [ -f ${iptab} ]; then
spc=$(cat ${iptab})
tab=${zone}-${spc}.${loc}
else
tab=${zone}.${loc}
fi
# If no RAM size is given use 1GB
if [ -z $ram ]; then
ram=1024
fi
# If no disk size is given use 10GB
if [ -z $mem ]; then
mem=10
fi
#Then Do Some stuff with that info
else
log "IP address given does not match any of the IP Network blocks. Please check the address and try again."
if [ -f ${korg} ]; then
mv ${korg} ${ksin}
fi
exit 0
fi
从日志输出中,我可以看到while循环在第一行中找不到该字符串,然后退出。如果我为其中包含第一行字符串的脚本传递参数,则while循环将执行所有操作,然后尝试第二行而不退出。完全莫名其妙。
在循环的开始,检查该行是否包含某些数据:
if echo ${line}|grep ${ipad}; then
该else
分支if
以
exit 0
这就是脚本停止的位置和原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句