因爲測試需要,要寫一個定時修改本機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.