码迷,mamicode.com
首页 > 其他好文 > 详细

脚本进阶,函数调用实例练习

时间:2018-01-07 21:52:52      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:echo   ip地址   sim   you   pass   ping   local   环境   down   

一、练习:脚本:判定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


脚本进阶,函数调用实例练习

标签:echo   ip地址   sim   you   pass   ping   local   环境   down   

原文地址:http://blog.51cto.com/12601987/2058439

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!