函数练习

  1. 编写函数,实现OS的版本判断

函数练习

OS (){
cat /etc/os-release | sed -nE 's/^PRETTY_NAME="(.*)"/1/gp'
}
  1. 编写函数,实现取出当前系统eth0的IP地址
IP (){
ip addr show dev eth0 | sed -En 's/inet *(([0-9]{1,3}.){3}[0-9]{1,3})/.*/1/gp' | tr -d " "
}
  1. 编写函数,实现打印绿色OK和红色FAILED
. /etc/init.d/functions

ok_failed(){
action "ok"
action "failed" false
}
  1. 编写函数,实现判断是否无位置参数,如无参数,提示错误
parameter (){
[ "$1" ] && action "有参数" || action "无参数" false
}

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_NAME is running...”,如果/var/lock/subsys/SCRIPT_NAME文件不存在,则显示“SCRIPT_NAME is stopped...” (7)在所有模式下禁止启动该服务,可用chkconfig 和 service命令管理 说明:SCRIPT_NAME为当前脚本名

函数练习

. /etc/init.d/functions 
DIR=/var/lock/subsys/testservice
start (){
[ -e "$DIR" ] && action "testservice is starting" || { touch $DIR ; action "testservice is starting"; }
}
stop (){
[ -e "$DIR" ] && { rm -rf $DIR ; action "testservice is stoping"; } || action "testservice is stoping"
}
status (){
[ -e "$DIR" ] && echo "testservice is starting" || echo "testservice is stoping"
}
restart (){
[ -e "$DIR" ] && { stop ; start; } || start
}
case $1 in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
restart
;;
*)
echo "please input start/stop/status/restart"
;;
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
. /etc/init.d/functions
DIR=/mnt/sysroot/
while true;do
read -p "please input command:" CMD
CMD_PATH=`which $CMD`
if [ $CMD = "quit" ];then
echo 退出
break
elif [ $CMD_PATH ];then
[ -d $DIR`dirname $CMD_PATH` ] && cp $CMD_PATH $DIR`dirname $CMD_PATH` || mkdir $DIR`dirname $CMD_PATH` && cp $CMD_PATH $DIR`dirname $CMD_PATH`
for path in `ldd $CMD_PATH |sed -nr 's/.*(/lib64.*)(.*/1/gp'`;do
cp $path $CMD_PATH $DIR`dirname $CMD_PATH`

done
else
echo "$CMD is not command"
fi
done

7.斐波那契数列又称黄金分割数列,因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列: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阶斐波那契数列

seq (){
if [ $1 -eq 0 ];then
echo 0
elif [ $1 -eq 1 ];then
echo 1
else
echo $[`seq $[$1-1]`+`seq $[$1-2]`]
fi
}
seq $1
发表评论

相关文章