因为测试需要,要写一个定时修改本机ip的程序,听说用shell编写比较简单明了,所以用shell写了(本人第一次用shell编程)。
#!/bin/bash
while true
do
ip_last=$((($RANDOM%255)+1))
echo now ip is: 192.168.1.$ip_last
ifconfig eth0 192.168.1.$ip_last
sleep 10s
done
以上是运行通过的脚本代码。
编写过程遇到的问题:
1.一开始,第一行我写成:#!/bin/sh,结果执行时出现:
arithmetic expression: expecting primary: "(%255)+1" (出错大概是因为/bin/sh不支持$RANDOM,而把它当作了普通的变量吧)
第一行的#!,是说明该脚本是在什么shell下面运行的,并且以该shell环境来执行脚本。
我用ls -l命令看了一下它们的属性:
可以看出/bin/sh指向了dash,百度一下它们俩的区别:
原来,Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,它速度更快,但功能相比bash要少很多,语法严格遵守POSIX标准。
bash(Bourne Again shell)是Bourne shell的扩展,与Bourne shell完全向后兼容,并且在Bourne shell的基础上增加、增强了很多特性。
详情可以看看:Dash与Bash的语法区别
2.括号问题
对于取随机数部分,起初我是写成:
ip_last=$(($RANDOM%255)+1)
执行的时候出现:
Syntax error: Missing '))'
不知道为什么还要加多一层括号。可能这是比较低级的问题,只是我刚学习,还没弄明白吧...
3.睡眠时间
表达方式可以是:
sleep 1 睡眠1秒
sleep 1s 睡眠1秒
sleep 1m 睡眠1分
sleep 1h 睡眠1小时
over.