fi


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting fi
# 8  
Old 07-27-2008
Code:
[root@inerdtech control]# sh -vx ./anticrash.sh
#!/bin/sh

+ $'\r'
: command not founde 2:
while true
do
  rm banme.tmp
  :> banme.txt
  /usr/sbin/tcpdump -p -c 100 -n -i eth0 "dst host 75.127.119.54 and udp port 7777" >banme.tmp
  grep "length 0" banme.tmp | cut -f 3 -d " " | cut -f 1-4 -d "." >> banme.txt
  if [ `grep -c . banme.txt` -gt 0 ]
  then
    ip=`head -1 banme.txt`
    if [ `grep -c ${ip} /etc/sysconfig/iptables` -eq 0 ]
    then
      dat=`date`
      echo "${dat} adding ${ip} to iptables" >> banme.log
      /sbin/iptables -A INPUT -s ${ip} -j DROP
      /sbin/iptables-save > /etc/sysconfig/iptables
    else
      echo "${ip} is already in iptables"
    fi   #//LINE20
./anticrash.sh: line 20: syntax error near unexpected token `fi'
'/anticrash.sh: line 20: `    fi   #//LINE20
[root@inerdtech control]#

# 9  
Old 07-27-2008
You have a return character "^M" after the lines. Try to remove those characters with:
Code:
tr -d '\r' < your_file > new_file

# 10  
Old 07-27-2008
Are you sure that your script file doesn't contain ^M character(s) ?

Code:
> cat -v ctrlM.sh
#/usr/bin/bash

# Next line is ctrl-M
^M
date
> sh -vx ctrlM.sh
#/usr/bin/bash

# Next line is ctrl-M

+ $'\r'
ctrlM.sh: line 4: $'\r': command not found
date
+ date
Sun Jul 27 22:34:29     2008
>

Try to remove ^M:
Code:
> tr -d '\r' <ctrlM.sh >no_ctrlM.sh
> sh -vx no_ctrlM.sh
#/usr/bin/bash

# Next line is ctrl-M

date
+ date
Sun Jul 27 22:37:49     2008
>

Jean-Pierre.
# 11  
Old 07-27-2008
sorry can you explain this a little more simply i dont understand
# 12  
Old 07-27-2008
The first error happens when an line containing only ^M is executed.
The script ctrM.sh in my previus post shows the error.

You can remove ^M in your script with the tr command (see the example in my post).

Jean-Pierre.
# 13  
Old 07-27-2008
Windows editors produce files that have two characters that define the end of a line - so-called carriage control.

UNIX just uses one character, so files from DOS or Windows show an extra character ascii 13 or control-M == ^M

UNIX shell does not like the ^M character. Delete all of the ^M characters and things will be fine. You can do it with Aigles tr example or with dos2ux (sometimes called dos2unix).

How to get rid of the ^M characters
Code:
# way  number 1
dos2ux anticrash.sh > tmfile; mv tmfile anticrash.sh; chmod +x anticrash.sh
#way number 2
tr -d '\r' < aniticrash.sh > newanticrash.sh; chmod +x newanticrash.sh

# note '\r' is the return button or ^M

# 14  
Old 07-28-2008
tcpdump: ioctl: No such device

why am i getting this error
Login or Register to Ask a Question

Previous Thread | Next Thread
Login or Register to Ask a Question