一、練習:腳本:判定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