关于linux的shell脚本问题

本人写了一个脚本,功能是判断输入的ip地址是否合法,若合法就配置,不合法就提示并退出,但是执行后却不能按期望的结果运行,代码具体如下,请大神帮忙分析解答,感激不尽。
#!/bin/sh
#menu2
#Main menu script
#ignore ctrl-c and QUIT interrupts
trap "" 2 3 15
#check ip address
function checkip ()
{
for var in `echo $1 | awk -F. '{print $1,$2,$3,$4}'`
do
if [ $var -ge 1 -a $var -le 255 ]
then
continue
else
return 1
fi
done
}
#configure ip manually
echo 'please input ip address'
read ipaddr
echo 'please input netmask'
read netmask
echo 'please input gateway'
read gateway
checkip $ipaddr && checkip $netmask && checkip $gateway
if [ $? == 1 ]; then
echo "Wrong IP configuration, please reset"
exit
else
ifconfig eth0 $ipaddr netmask $netmask
route add default gw $gateway
fi

无论怎么设置ip,不论是正确的还是错误的都不行,是哪里错了?

第1个回答  2013-08-29
检验真理的办法是实践,我亲测了下你的脚本,不知道你说的是哪里不行?
# sh ipcon.sh
please input ip address
134.1.2.3
please input netmask
255.255.255.3
please input gateway
134.1.2.1
ifconfig eth0 134.1.2.3 netmask 255.255.255.3
route add default gw 134.1.2.1

#sh ipcon.sh
please input ip address
a.3.3.256
please input netmask
1.2.2.2
please input gateway
1.1.1.1
ipcon.sh: line 11: [: a: integer expression expected
Wrong IP configuration, please reset

#sh ipcon.sh
please input ip address
123.1.2.256
please input netmask
123.1.2.1
please input gateway
123.1.2.0
Wrong IP configuration, please reset追问

我设置正确的ip地址,脚本不能判断为正确的并将我的设置在系统中生效啊

追答

for循环有问题:
for循环中,不管是错误格式的IP还是正确的IP,都会走到continue(假设我输入的全是数字,但不是四个段,比如123.123也被认为是正确的IP)

但是如果IP地址符合规范,看我的第一个测试,是可以通过的呀,只不过我是把命令echo出来了

把你的运行结果贴出来看看

第2个回答  2013-08-29
我看下来应该没有问题。

你是每次运行都提示:"Wrong IP configuration, please reset" 这个吗?

把你设置的ip地址贴上来看看。
第3个回答  2013-08-28
checkip $ipaddr && checkip $netmask && checkip $gateway //感觉有问题

shell脚本执行linux命令
切换到shell脚本所在的目录(也叫工作目录)执行shell脚本,具体代码是:cd \/data\/shell .\/hello.sh 方式二:可以以绝对路径的方法去执行bash shell脚本,具体代码是:\/data\/shell\/hello.sh 方式三:可以选择直接使用bash命令或者sh命令来执行bash shell脚本,具体代码是:cd \/data\/shell bash hello.sh ...

Linux下执行Shell脚本出现$‘\\r‘: command not found
在Linux下执行由Windows编辑的.sh脚本时,若该脚本包含空行,可能遇到$‘\\r‘: command not found的错误。这是因为Windows和Linux的文件格式存在差异,Windows中换行符为\\r,而Linux使用的是。脚本中的\\r无法被Linux识别,从而引发问题。问题根源在于脚本编码问题。为解决此问题,首先,需将脚本格式进行调...

一文搞懂Shell脚本面试问题大全
for 循环:...,while 循环:...,until 循环:...16) #!\/bin\/sh 或 #!\/bin\/bash 表示什么意思?说明使用的 shell 类型。对于 bash:#!\/bin\/bash。17) 如何获取文本文件的第 10 行?18) bash 脚本文件的第一个符号是什么?19) 命令:[ -z "" ] && echo 0 || echo 1 输出什么?

shell脚本的四种执行方式(shell脚本执行shell脚本)
linuxshell脚本执行方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本:cd\/data\/shell.\/hello.sh.\/的意思是说在当前的工作目录下执行hello.sh。\\x0d\\x0a也可以采用$kshtest\\x0d\\x0a这种方式要求shell具有“可读”的访问权限。\\x0d\\x0a直接运行可执行的shell脚本之前,首先应...

linux shell脚本执行命令详解
linux shell脚本执行 linux shell脚本执行方法一: 切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本:cd \/data\/shell .\/hello.sh .\/的意思是说在当前的工作目录下执行hello.sh。如果不加上.\/,bash可能会响应找到不到hello.sh的错误信息。因为目前的工作目录(\/data\/shell)可能不在执行...

Linux在执行shell脚本时提示find: command not found,单独执行该命令可 ...
出现此问题的原因:linux 执行sh文件里面缺少PATH=$PATH:\/sbin,将其添加进即可解决问题。详细的操作步骤如下:1、首先,需要打开计算机的桌面,右键单击并选择“打开终端”这一项,如下图所示。2、其次,完成上述步骤后,将进入如图所示的页面,在命令行上输入“gedit \/ etc \/ profile”,然后按Enter...

分享70个经典的 Shell 脚本面试题与答案
我们为你的面试准备选择了 70 个你可能遇到的 shell 脚本面试问题及解答。了解脚本或至少知道基础知识对系统管理员来说至关重要,它也有助于你在工作环境中自动完成很多任务。在过去的几年里,我们注意到所有的 linux 工作职位都要求脚本技能。1) 如何向脚本传递参数 ?.\/script argument 例子: 显示文件...

Linux中shell命令相关问题求助大佬
2013-11-08 Linux操作系统默认的shell程序是什么 5 2016-04-27 如何设置Linux操作系统shell命令的默认语言 2017-12-06 linux的命令行操作和shell的区别 2014-07-05 关于Linux操作系统的论文 2012-08-12 shell是运行在LINUX操作系统上的脚本文件吗 更多类似问题 > 为...

在写linux shell 的ger expression expected,请各位大神帮忙
在编写Linux shell脚本时,遇到了关于正则表达式预期的问题。当你尝试通过`du -sh`命令检查目录大小,然后用`awk`和`cut`处理结果时,遇到了`integer expression expected`的错误。这是因为`awk`和条件语句如`-ge`等在比较时,期望的是整数,而不是小数。例如,脚本中的一段代码:arc_yiyong=`du -...

linux用的SHELL脚本问题,麻烦各位大侠们不吝赐教了,小弟感激涕零啊...
shutdown -c #取消关机动作 ping -w 5 -c 1 192.168.1.2 >\/dev\/null 2>&1 #ping第二个IP地址,并重定向 if [ $? -eq 0 ]; then #如果ping通,取消关机动作 shutdown -c #取消关机动作 ping -w 5 -c 1 192.168.1.3 >\/dev\/null 2&...

相似回答