1、编写函数,实现OS的版本判断
#!/bin/bash
os () {
osnum=`sed -r 's/.* ([0-9])\..*/\1/' /etc/redhat-release`
echo "$osnum"
}
if [ `os` -eq 6 ];then
echo "osversion is 6"
elif [ `os` -eq 7 ];then
echo "osversion is 7 "
elif [ `os` -eq 5 ];then
echo "osversion is 5"
fi
2、编写函数,实现取出当前系统eth0的IP地址
#!/bin/bash
ens38 () {
ip=`ifconfig ens38|grep netmask|tr -s ' '|cut -d ' ' -f3`
echo ipaddr=$ip
}
ens38
3、编写函数,实现打印绿色OK和红色FAILED
[root@redhat7 script]#cat ok.sh
#!/bin/bash
#
. /etc/init.d/functions
action "success!" true
action "failed" false
[root@redhat7 script]#./ok.sh
success! [ OK ]
failed [FAILED]
4、编写函数,实现判断是否无位置参数,如无参数,提示错误
#!/bin/bash
#
args () {
if [ $# -eq 0 ];then
. /etc/init.d/functions
action "fail... you must input a parameter" false
fi
}
args $1
[root@redhat7 script]#./weizhicanshu.sh
fail... you must input a parameter [FAILED]
5、编写服务脚本/root/bin/testsrv.sh,完成如下要求
(1) 脚本可接受参数:start, stop, restart, status
(2) 如果参数非此四者之一,提示使用格式后报错退出
(3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME, 并显示“启动成功”
考虑:如果事先已经启动过一次,该如何处理?
(4) 如是stop:则删除/var/lock/subsys/SCRIPT_NAME, 并显示“停止完成”
考虑:如果事先已然停止过了,该如何处理?
(5) 如是restart,则先stop, 再start
考虑:如果本来没有start,如何处理?
(6) 如是status, 则如果/var/lock/subsys/SCRIPT_NAME文件存在,则显示“SCRIPT_NAMEis running...”
如果/var/lock/subsys/SCRIPT_NAME文件不存在,则显示“SCRIPT_NAME is stopped...”
其中:SCRIPT_NAME为当前脚本名
(7)在所有模式下禁止启动该服务,可用chkconfig和service命令管理
#!/bin/bash
#chkconfig:- 96 07
#description
[ -f /etc/rc.d/init.d/`basename $0` ]||mv /app/script/`basename $0` /etc/rc.d/init.d/`basename $0`&>/dev/null
chkconfig --add `basename $0`
sta () {
touch /var/lock/subsys/`basename $0`
. /etc/init.d/functions
action "`basename $0` start successful!" true
}
sto () {
rm /var/lock/subsys/`basename $0`
. /etc/init.d/functions
action "`basename $0` is stopped" true
}
rest () {
sto
sta
}
statu () {
if [ -f /var/lock/subsys/`basename $0` ];then
. /etc/init.d/functions
action "`basename $0` is running" true
else
action "`basename $0` is stopped" true
fi
}
case $1 in
start)
if [ -f /var/lock/subsys/`basename $0` ];then
echo "`basename $0` is running"
else
sta
fi
;;
stop)
if [ -f /var/lock/subsys/`basename $0` ];then
sto
else
echo "`basename $0` has been stopped before"
fi
;;
restart)
if [ -f /var/lock/subsys/`basename $0` ];then
sto
sta
else
sta
fi
;;
status)
statu
;;
esac
6、编写脚本/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退出
#!/bin/bash
#
read -p "please input a excute cmd(eg:cat|bash|quit):" command
[ -a /mnt/sysroot ]||mkdir /mnt/sysroot &>/dev/null
cpdir () {
cmd=`which --skip-alias $command`
if [ -f /mnt/sysroot$cmd ];then
echo "the $cmd has been cp before"
else
local dir=`dirname $cmd`
mkdir -p /mnt/sysroot$dir
cp $cmd /mnt/sysroot$cmd
echo "cp $cmd finished"
fi
}
cplib () {
cmd=`which --skip-alias $command`
ldd $cmd |egrep -o "/lib64.* "|while read i;do
if [ ! -f /mnt/sysroot$i ];then
local dir=`dirname $i`
mkdir -p /mnt/sysroot$dir
cp $i /mnt/sysroot$i
echo "cp $i finished"
else
echo "$i has been cp before"
fi
done
}
type $command&>/dev/null||{ echo the command is not exsit;exit 100; }
until [ $command == quit ];do
type $command&>/dev/null||{ echo the command is not exsit;exit 100; }
cpdir
cplib
read -p "please input new excute cmd(eg:cat|bash|quit):" command
cmd=`which --skip-alias $command`
done
7、编写函数实现两个数字做为参数,返回最大值
#!/bin/bash
#
>/app/f1
max () {
[ $# -ne 2 ]&&echo "you must input two number"&&exit 10
until [ $# -eq 0 ];do
echo $1 >>/app/f1
shift
done
sort -nr /app/f1|head -n1
}
max $*
8、斐波那契数列又称黄金分割数列,因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2)
利用函数,求n阶斐波那契数列
#!/bin/bash
#
read -p "请输入斐波那契数列的阶数:" n
func1 () {
if [ $1 -eq 0 ];then
echo 0
elif [ $1 -eq 1 ];then
echo 1
else
echo $[`func1 $[$1-1]`+`func1 $[$1-2]`]
fi
}
for i in `seq 0 $n`;do
func1 $i
done
9、汉诺塔(又称河内塔)问题是源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘,利用函数,实现N片盘的汉诺塔的移动步骤