脚本进阶,函数调用实例练习
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了脚本进阶,函数调用实例练习相关的知识,希望对你有一定的参考价值。
一、练习:脚本:判定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
以上是关于脚本进阶,函数调用实例练习的主要内容,如果未能解决你的问题,请参考以下文章