一、練習:腳本:判定192.168.0.200-192.168.0.254之間哪些主機在線,要求:

1、使用函數來實現一臺主機的判定過程:

2、在主程序中調用此函數判定指定范圍內的所有主機的在線情況,

vim ping.sh

#!/bin/bash

#

PING() {

for i in {200..254};do

if ping -c 1 -w 1 192.168.0.$i &> /dev/null; then

echo "192.168.0.$i is up"

else

echo "192.168.0.$i is down"

fi

done

}

PING

chmod +x ping.sh


把所有功能寫入函數體中,無法適用更廣泛的環境,上面腳本就是這樣,


下面實例在函數中使用位置變量,在主程序中調用函數體使腳本使用環境更寬泛

vim ping.sh

#!/bin/bash

#

PING() {

if ping -c 1 -w 1 $1 &> /dev/null; then

echo "192.168.0.$i is up"

else

echo "192.168.0.$i is down"

fi

done

}

for i in {200..254};dp

PING 192.168.0.$i

done


for ?i in {200..254}; do

PING 172.16.100.$i

done



下面實例函數體使用return參數,在主程序中判定IP地址up和down

vim ping.sh

#!/bin/bash

#

PING() {

if ping -c 1 -w 1 $1 &> /dev/null; then

return 0

else

return 1

fi

done

}

for i in {200..254};dp

PING 192.168.0.$i

if [ $? -eq 0 ]; then

echo "192.168.0.$1 is up"

else?

echo "192.168.0.S1 is down"

done


for ?i in {200..254}; do

PING 172.16.100.$i

done?


?練習二、 編寫腳本/root/bin/copycmd.sh

(1) 提示用戶輸入一個可執行命令名稱

(2) 獲取此命令所依賴到的所有庫文件列表

(3) 復制命令至某目標目錄(例如/mnt/sysroot)下的對應路徑下

?如:/bin/bash ==> /mnt/sysroot/bin/bash

/usr/bin/passwd ==> /mnt/sysroot/usr/bin/passwd

(4) 復制此命令依賴到的所有庫文件至目標目錄下的對應路徑下

: 如:/lib64/ld-linux-x86-64.so.2 ==>?

/mnt/sysroot/lib64/ld-linux-x86-64.so.2

(5)每次復制完成一個命令后,不要退出,而是提示用戶鍵入新

的要復制的命令,并重復完成上述功能;直到用戶輸入quit退出


#1/bin/bash

dst=/mnt/sysimage

if [ ! -e "$dst" ];then

mkdir -pv $dst

fi

my_cp() {

local src=$1

local dst=$2

local dir=`dirname $dst`

if [ ! -e $dir ];then

mkdir -pv $dir

fi

\cp -a $src $dst

}

while true;do

read -p "enter you cmd;" short_cmd

if [ "$short_cmd" == "quit" -o "$short_cmd" == "q" ];then

exit 0

fi

short_cmd=`basename $short_cmd`

long_cmd=`which --skip-alias --skip-functions --skip-dot --skip-tilde $short_cmd` &>/dev/null

#cp bin

my_cp $long_cmd $dst$long_cmd

# cp lib

for lib in `ldd $long_cmd |egrep -o "/[^[:space:]]+"`;do

echo -e "\n$lib\n"

my_cp $lib $dst$lib

done

done