尝试我的第一个BASH脚本,不断收到意外的文件结束

时间:2014-12-06 13:19:17

标签: linux bash

我试图创建一个几乎可以自动执行此过程的脚本: http://knowledgelayer.softlayer.com/procedure/add-additional-ips-redhat

不太确定它的工作效果如何,但是在我将剧本改为一个之前并没有走得太远。以下是脚本的内容:

使用更新的代码进行编辑: 编辑#2:它主要用于工作,但现在它运行循环并跳过读取propmt以获取静态IP

   #!/bin/bash

path=/etc/sysconfig/network-scripts/
echo "Let's get your IP added :)"
echo""


getnewip()
{
echo read -p "Enter the new IP Address you wish to add: " staticip
}

getserverinfo()
{
gateway=$(netstat -rn | sed -n 3p | awk '{print $2}')
netmask=$(ifconfig eth1 | grep -i 'netmask' | grep -v '127.0.0.1' | awk '{print $4}')
clone=$( ifconfig | grep eth1 | awk '{print $1}' | cut -d: -f2 )
}


rangechecks()
{
cd /etc/sysconfig/network-scripts/
ls ifcfg-eth1-range*

filename==$1
if [[ ! -f $filename ]]; then
touch "$filename"
echo "Created \"$filename\""

fi

digit=1
while true; do
temp_name=$filename-$digit
if [[ ! -f temp_name ]]; then
touch "$temp_name"
echo "Created $path\"$temp_name\""
digit=$((digit + 1 ))
fi
done
}


writeinterfacefile()
{
cat >> "/etc/sysconfig/network-scripts/$1" << EOF
IPADDR_START=$staticip
IPADDR_END=$staticip
NETMASK=$netmask
CLONENUM_START=$((clone+1))
EOF

echo ""
echo "Your information was saved in the file '$1'."
echo ""


}
{
clear
getserverinfo
echo ""
echo "Please verify this information: "
echo "Gateway Address: " "$gateway"
echo "Netmask: " "$netmask"
echo "Your new IP: " "$staticip"
echo ''

while true; do
read -p "Is this information correct? [y/N]" yn
case $yn in
[Yy]* ) $writeinterfacefile;;
[Nn]* ) print "$getserverinfo" && exit ;;
 * ) echo 'Please enter Y or n';;
esac
done
}

我在编写脚本时相当新,所以请原谅可怕的语法。我的目光在于EOF,但我不知道。

2 个答案:

答案 0 :(得分:1)

rangechecks没有},您的while没有done ...
你应该缩进你的代码。我开始这样做,并立即注意到错误。

其他事项:

  • 单引号不会扩展变量,'/etc/sysconfig/network-scripts//$1将无法执行您想要的操作。
  • echo ""相当于echo
  • foo='bar'; echo "blah" echo -n $foo将输出'blah echo -n bar'。
  • exit退出脚本,我不确定这是你的想法。
  • 默认情况下,
  • [y/N]通常表示N(大写字母) 此外,您再问enter Y or n。保持一致!
  • 使用变量作为参数时,请双引号。这可以确保它保持原样(作为一个参数,而不是由shell扩展)。

答案 1 :(得分:0)

我无法看到函数rangechecks

的结束大括号

另外,不要在第一行缩进shebang。