shell脚本——循环和函数
1、打印一个等腰三角形
#!/bin/bash
for i in `seq ` ;do
for j in `seq $[-$i]` ;do
echo -n ' '
done for k in `seq $[i*-]` ;do
echo -n '*'
done
echo
done
2、打印99乘法表
#!/bin/bash
for i in {..} ;do
for (( j=; j<=$i; j++ )) ;do
accumulate=$[i*j]
echo -ne "${j}*${i}=$accumulate\t"
done
echo
done
3、输入网段,探测网段内存活的主机
#!/bin/bash
trap 'exit' read -p "please input a network address: " DNET
echo $DNET |grep -qE "^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.){2}0$" || { echo "ipaddr error"; exit; } for I in {..} ;do
{
if ping -W1 -c1 ${DNET%.*}.$I &>/dev/null ;then
echo "${DNET%.*}.$I is up."
fi
}&
done unset DNET
unset I
wait
4、打印国际象棋棋盘
#!/bin/bash
read -p "size: " bsize line=$[bsize*-]
for i in `seq $line` ;do
for j in `seq $line` ;do
if [ $[(i/bsize+j/bsize)%] -eq ] ;then
echo -ne "\033[47m \033[0m"
else
echo -n " "
fi
done
echo
done
5、编写函数(my_functions),实现打印绿色OK和红色FAILED
#Print OK and FAILED#######################################
green_OK() { echo -e "[ \033[1;32mOK\033[0m ]"; }
red_FAILED() { echo -e "[ \033[1;31mFAILED\033[0m ]"; } Screen=`stty -F /dev/tty size`
Columus=${Screen#* }
Spa_Col=$[Columus-] Progress() {
local i
for i in {..} ;do
echo -n "."
sleep 0.5
done
}
success() {
local i
string="$1"
Rt_Spa=$[$Spa_Col-${#string}]
echo -n "$string"
Progress
for i in `seq $Rt_Spa` ;do
echo -n " "
done
green_OK
}
failed() {
local i
string="$1"
Rt_Spa=$[$Spa_Col-${#string}]
echo -n "$string"
Progress
for i in `seq $Rt_Spa` ;do
echo -n " "
done
red_FAILED
}
6、编写脚本copycmd.sh
- (1) 提示用户输入一个可执行命令名称;
- (2) 获取此命令所依赖到的所有库文件列表;
- (3) 复制命令至某目标目录(例如/mnt/sysroot)下的对应路径下;
- 如:/bin/bash ==> /mnt/sysroot/bin/bash
- (4) 复制此命令依赖到的所有库文件至目标目录下的对应路径下;
- 如:/lib64/ld-linux-x86-64.so.2 ==> /mnt/sysroot/lib64/ld-linux-x86-64.so.2
- (5)每次复制完成一个命令后,不要退出,而是提示用户键入新的要复制的命令,并重复完成上述功能;直到用户输入quit退出;
#!/bin/bash
. my_functions
Ddir="/mnt/sysroot"
[ ! -d "$Ddir" ] && mkdir "$Ddir" cpbin() {
cmddir=`echo "$Cmd_path" |grep -o ".*/\b"`
[ ! -d "${Ddir}${cmddir}" ] && mkdir -p "${Ddir}${cmddir}"
cp -n "$Cmd_path" "${Ddir}${cmddir}"
} libcp() {
echo "$Lib_path" |while read line ;do
libdir=`echo "$line" |grep -o ".*/\b"`
[ ! -d "${Ddir}${libdir}" ] && mkdir -p "${Ddir}${libdir}"
cp -n "$line" "${Ddir}${libdir}" 2>/dev/null
done
} while read -p "Input a cmd. (quit): " CMD ;do
if [ "$CMD" == 'quit' ] ;then echo "Think you! Bye bye."; break; fi
if ! which "$CMD" &>/dev/null ;then
echo "not find $CMD, please input again."
failed "copy $CMD failed."
continue
fi
Cmd_path=`which $CMD |grep -o "/.*"`
Lib_path=`ldd $Cmd_path |sed -nr 's#.*[[:space:]]+(/.*) .*#\1#p'`
cpbin
libcp
success "copy $CMD Complete."
done
7、求斐波那契数列的第N个数
#!/bin/bash
feibo() {
if [ $ -eq ] ; then
echo
elif [ $ -eq ] ;then
echo
else
echo $[`feibo $[$-]`+`feibo $[$-]`]
fi
} read -p "please a num: " n
8、求N的阶乘
#!/bin/bash
fact() {
if [ $ -eq -o $ -eq ] ;then
echo
else
echo $[$*`fact $[$-]`]
fi
} fact $
9、汉诺塔:问题是源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘,利用函数,实现N片盘的汉诺塔的移动步骤。
hannuota() {
local from=$
local buffer=$
local to=$
local m=$ if [ "$m" -eq ] ;then
echo "$from --> $to"
else
hannuota $[m-] $from $to $buffer
echo "$from --> $to"
hannuota $[m-] $buffer $from $to
fi
} read -p "please input num: " n
hannuota $n a b c
10、编写服务脚本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...” 其中:SCRIPT_NAME为当前脚本名
- (7)在所有模式下禁止启动该服务,可用chkconfig 和 service命令管理
#!/bin/bash
# chkconfig: 2345 98 01
. /root/bin/35_my_functions
lockfile="/var/lock/subsys/testsrv" s_start() {
[ -f "$lockfile" ] && failed "testsrv is running." && exit
touch "$lockfile"
success "testsrv start "
}
s_stop() {
[ ! -f "$lockfile" ] && failed "testsrv is not running." && exit
rm -f "$lockfile"
success "testsrv stop "
}
s_status() {
[ -f "$lockfile" ] && echo "testsrv is running." || echo "testsrv is not running."
}
s_usage() {
echo "Usage: `basename $0` {start|stop|restart|status}"
exit
} [ $# -ne ] && s_usage
case $ in
start)
s_start
;;
stop)
s_stop
;;
restart)
if [ -f "$lockfile" ] ;then
s_stop
s_start
else
failed "testsrv is not running , stop "
s_start
fi
;;
status)
s_status
;;
*)
s_usage
esac
个人学习笔记,只供参考 ^_^
shell脚本——循环和函数的更多相关文章
- 3.shell脚本循环试题
shell脚本循环试题 1.计算从1到100所有整数的和 #!/bin/bash a=0 for i in {1..100} #1到100 #每次循环变量i的值也为循环次数 do a=$[ $a + ...
- shell编程基础(四): shell脚本语法之函数及调试
一.Shell脚本中的函数 和C语言类似,Shell中也有函数的概念,但是函数定义中没有返回值也没有参数列表.例如: #! /bin/sh fun(){ echo "Function fun ...
- shell脚本-循环选择语句
shell脚本-循环选择语句 过程式编程语言: 顺序执行 选择执行 循环执行 注:条件中的变量,可以在执行语句中使用,不用在加上"$". if语句 根据命令的退出状态来执行命令 单 ...
- 没事就要多做多练,Shell脚本循环例题做一做
Shell脚本循环例题 一.示例1 二.示例2 三.示例3 四.示例4 ...
- Linux&shell之高级Shell脚本编程-创建函数
写在前面:案例.常用.归类.解释说明.(By Jim) 使用函数 #!/bin/bash # testing the script function myfun { echo "This i ...
- 在shell脚本中使用函数
转载请标明:http://www.cnblogs.com/winifred-tang94/ 对于在脚本中重复使用的功能模块,可以封装成为函数. shell脚本中函数的定义可以使用如下两种方式: a. ...
- 【shell脚本】shell脚本实现的 函数差集查找
文本地址 点击关注微信公众号 wenyuqinghuai 分享提纲: 1. 问题背景 2. 代码实现 1.问题背景 在做公司的测试的自动化测试时,覆盖了一些开发代码的函数,但是那些还没有做,使用一个函 ...
- linux shell 进阶篇、shell脚本编程-创建函数
使用函数 #!/bin/bash # testing the script function myfun { echo "This is an example of a function&q ...
- shell脚本循环和信号
条件判断 if 条件1:then COMMAND elif 条件2:then COMMAND else COMMAND(:) : 表示pass 不执行任何命令 fi 读取用 ...
随机推荐
- JSP--常用标签
JSTL简介: JSTL是Java中的一个定制标签库集 实现了JSP页面中的代码复用,提高效率 可读性更强,方便前端查看与开发 环境搭建: JSTL标签和Servlet及JSP页面有比较严格的版本对应 ...
- FFmpeg 基本用法
FFmpeg FFmpeg 基本用法 本课要解决的问题 1.FFmpeg的转码流程是什么? 2.常见的视频格式包含哪些内容吗? 3.如何把这些内容从视频文件中抽取出来? 4.如何从一种格式转换为另一种 ...
- Silk codec的一些资料
Skype表示它最近将开始向第三方开发人员和硬件制造商提供免版税认证(RF)的Silk宽带音频编码器. Silk下载地址如下 http://developer.skype.com/silk/SILK_ ...
- AngularJS directive简述
转自:http://segmentfault.com/q/1010000002400734 官方API:http://docs.angularjs.cn/api/ng/service/$compile ...
- Django来敲门~第一部分【4. 创建第一个模块应用】
成若缺,其用不弊.大盈若冲,其用不穷.大直若屈.大巧若拙.大辩若讷.静胜躁,寒胜热.清静为天下正 ——老子<道德经> 本章内容 创建应用(app) 开发第一个视图(View) URL访问配 ...
- 学习大牛笔记nginx + gunicorn + supervisor
安装 gunicorn pip install gunicorn pip 是一个重要的工具,python 用来管理包.还有一个最佳生产就是每次使用 pip 安装的库,都写入一个 requirement ...
- JavaScript RegExp 正则表达式基础详谈
前言: 正则对于一个码农来说是最基础的了,而且在博客园中,发表关于讲解正则表达式的技术文章,更是数不胜数,各有各的优点,但是就是这种很基础的东西,如果我们不去真正仔细研究.学习.掌握,而是抱着需要的时 ...
- 问题:c# newtonsoft.json使用;结果:Newtonsoft.Json 用法
Newtonsoft.Json 用法 Newtonsoft.Json 是.NET 下开源的json格式序列号和反序列化的类库.官方网站: http://json.codeplex.com/ 使用方法 ...
- Qt乱码解决办法(常量中有换行符)
用记事本打开源代码,然后点另存为,utf-8,编码覆盖 QStringLiteral("打开相机")
- ls- 查看文件信息
通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录.文件夹.文件权限),查看目录信息等等,ls 命令在日常的linux操作中用的很多,在此给大家介绍一下ls 命令的使 ...