一、Shell 腳本編寫
1、提示用戶輸入一個字符串,如果是 hello,打出 yes,并每秒輸出 "hello,world",否則就輸出 no,實現如下:
#!/bin/bash
#Filename:hello.sh
echo "Please input 'hello'"
read -p "> " str // 得到鍵盤輸入
echo $str
if [ "$str" == hello ]
then
echo "yes"
while true
do
echo "hello, world"
sleep 1 // 睡眠1秒
done
else
echo "no"
fi
2、實現一個 find.sh,運行 ./find.sh /tmp/test.txt ,當 /tmp/test.txt 為文件且存在時輸出 yes, 否則輸出 no,實現如下:
#!/bin/bash
#Filename:find.sh
args1=$1 ( $0 為要執行的文件路徑,$1 為輸入的第一個參數,以此類推)
if [ -e "$args1" ] // 如果該變量代表的值是一個文件
then
echo "yes"
else
echo "no"
fi
判斷文件的參數如下:
-e 文件存在
-f file 是一個 regular 文件(不是目錄或者設備文件)
-s 文件長度不為 0
-d 文件是個目錄
-b 文件是個塊設備(軟盤,cdrom 等等)
-c 文件是個字符設備(鍵盤,modem,聲卡等等)
-p 文件是個管道
-h 文件是個符號鏈接
-L 文件是個符號鏈接
-S 文件是個 socket
-t 關聯到一個終端設備的文件描述符 這個選項一般都用來檢測是否在一個給定腳本中的 stdin[-t0]或[-t1]是一個終端
-r 文件具有讀權限(對于用戶運行這個 test)
-w 文件具有寫權限(對于用戶運行這個 test)
-x 文件具有執行權限(對于用戶運行這個 test)
3、實現一個 ping.sh
• 運行 ./ping.sh start 后在后臺運行 ping 命令,ping 127.0.0.1,并把 ping 結果輸出到 /tmp/ping.log
• 運行 ./ping.sh status 顯示 ping 命令是否正在運行
• 運行 ./ping.sh stop 停止 ping 命令,如果正在運行的話。
# 方法一:輸入 stop 時,直接關閉所有的 ping 進程
#!/bin/bash
#Filaname:ping.sh
if [ "$1" == "start" ]
then
ping 127.0.0.1 > /tmp/ping.log &
elif [ "$1" == "status" ]
then
ps -ef | grep "ping 127.0.0.1"
elif [ "$1" == "stop" ]
then
killall ping (會干掉所有的ping 進程,包括子進程)
fi
#方法二:得到ping 127.0.0.1 的進程 ID ,再用kill 結束掉
#!/bin/bash
#Filaname:ping.sh
if [ "$1" == "start" ]
then
ping 127.0.0.1 > /tmp/ping.log &
elif [ "$1" == "status" ]
then
ps -ef | grep "ping 127.0.0.1"
elif [ "$1" == "stop" ]
then
pid=`ps -ef |grep ping | grep "127.0.0.1" | awk '{print $2}'`
if [ "pid" -gt 0 ];then
kill $pid
echo kill $pid
else
echo "要關閉的進程不存在"
fi
fi
4、將上面的 ping.sh 加入開機自啟動
# 方法一:
系統的rc.local 文件是在 系統啟動之后才加載的,可以把腳本添加到這個文件中
打開 /etc/rc.d/rc.local 文件(root 用戶):vim /etc/rc.d/rc.local
加入下面兩行:
cd /home/demon # 進入到當前目錄
su demon -c "./ping.sh start"
# 方法二:
# 修改 ping.sh 的權限
# chmod 755 ping.sh
# 將 ping.sh 移動到 /etc/rc.d/init.d/ 目錄下
# 使用 chkconfig 命令將腳本設為開機啟動
# chkconfig --add ping.sh