sh5.while 脚本练习
脚本编程:
顺序结构
选择结构
if, case
循环结构
for,while,until
while循环:适用于循环次数未知的场景
语法:
while CONDITION;do
statement
....
done
while 练习:
1. 计算1到100正整数和
一.while
#/bin/bash
sum=
i=
while [ $i le ];do
let sum+=i # let sum=sum+i 等于 let sum+=i
i++
done
echo $sum 二.for
#/bin/bash
sum=
for i in {..};do # for ((i=;<=;i++
let sum+=i # sum=`expr $sum + $i` #expr 运算注意空格
done
echo $sum 三.seq
#/bin/bash
sum=
for i in `seq `;do
sum=`expr $sum + $i`
done
echo $sum 四. seq
seq -s"+" |bc 五. for II
#/bin/bash
echo -e "\t${!#}" #显示脚本名,路径
for (( i=;i<=;i++ ));do
sum=$[ ${sun} + ${i} ]
done
echo $sum 六. sed
echo {..}|sed 's/ /+/g' | bc 整数比较:
-eq : 测试两个整数是否相等;比如 [ $A -ep $B ]
-ne : 测试两个整数是否不等,不等为真,相等为假
-gt : >
-lt : <
-ge : >=
-le : <=
命令间逻辑关系:
逻辑与 : &&
逻辑或 : ||
总结一下整型变量自增的方法:
整形变量自增;
. i=`expr $i+`;
. let i+=;
. ((i++));
. i=$[$i+];
. i=$(($i + )) #!/bin/bash
i=;
while [ $i -lt ];do
echo $i;
#i=`expr $i + `;
let i+=;
# ((i++));
# i=$[$i+];
# i=$(( $i + ))
done 另外 ,对于对于固定次数的循环,可以通过sep命令来实现,就不需要变量的处境了,实例如下 : #!/bin/bash
for j in $(seq );do
echo $j
done
练习2:
写 一个脚本,如果输入小写字母自动转换成大写显示 ,quit 退出
#/bin/bash
#
read -p "Input something:" STRING
while [ $STRING != 'quit' ];do
echo $STRING | tr 'a-z' 'A-Z'
read -p "Input someting:" STRING
done read命令
-p(提示语句)
-n(字符个数)
-t(等待时间)
-s(不回显) -p:
由于read命令提供了-p参数,允许在read命令行中直接指定一个提示。 #!/bin/bash read -p "Enter your name:" name echo "hello $name, welcome to my program" exit 在上面read后面的变量只有name一个,也可以有多个,这时如果输入多个数据,则第一个数据给第一个变量,第二个数据给第二个变量,如果输入数据个数过多,则最后所有的值都给最后一个变量。 -t:
使用read命令存在着潜在危险。脚本很可能会停下来一直等待用户的输入。如果无论是否输入数据脚本都必须继续执行,那么可以使用-t选项指定一个计时器。 -t选项指定read命令等待输入的秒数。当计时满时,read命令返回一个非零退出状态;
例1,:
#!/bin/bash
if read -t -p "please enter your name:" name ;then
echo "hello $name ,welcome to my script"
else
echo "sorry,too slow"
fi
exit 例2: -n
#!/bin/bash
read -n1 -p "Do you want to continue [Y/N]?" answer
case $answer in
Y | y)
echo "fine ,continue";;
N | n)
echo "ok,good bye";;
*)
echo "error choice";;
esac
exit 该例子使用了-n选项,后接数值1,指示read命令只要接受到一个字符就退出。只要按下一个字符进行回答,read命令立即 接受输入并将其传给变量。无需按回车键。 -s 输入不显示 有时会需要脚本用户输入,但不希望输入的数据显示在监视器上。典型的例子就是输入密码,当然还有很多其他需要隐藏的数据。
-s选项能够使read命令中输入的数据不显示在监视器上(实际上,数据是显示的,只是read命令将文本颜色设置成与背景相同的颜色) #!/bin/bash read -s -p "Enter your password:" pass echo "your password is $pass" exit
练习3:
检测用户是否登录脚本,每5秒检测一次,如登录即退出脚本。
#/bin/bash
#
if [ $# -lt 1 ];then
echo "Input a,b,c.. user"
exit 8
fi
for i in `echo $1 | sed 's/,/ /g'`;do
if id $i &> /dev/null;then
who | grep "$i" &> /dev/null
RET=$?
while [ $RET -ne 0 ];do
echo "`date`,$i is not log."
sleep 5
who | grep "$i" &> /dev/null
RET=$?
done echo " $i is loging ..`date`"
else
echo "No such $i"
fi
done 注:
可以接受一个或多个用户参数,检测指定用户是否已登录 [root@beary test]# ./login.sh root,bb
root is loging ..Mon Nov 21 14:40:31 CST 2016
Mon Nov 21 14:40:31 CST 2016,bb is not log.
Mon Nov 21 14:40:36 CST 2016,bb is not log.
....
练习4.
写一个脚本查看硬盘空间,内存,swap使用信息
,显示一个菜单给用户
d|D) show disk usager.
m|M) show memory usagers.
s|S) show swap usages.
*) quit.
.当用户给定选项后显示相应的内容;
扩展: 当用户选择完成,显示相应信息后,不退出,而让用户再一次选择,再次显示相应信息,直到输入’quit' 退出 #/bin/bash
#
cat << EOF
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*)quit.
EOF read -p "Your choice:" CHOICE
while [ $CHOICE != 'quit' ];do
case $CHOICE in
d|D)
echo "Disk usages."
df -Ph;;
m|M)
echo "Memory usages."
free -m | grep "Mem" ;;
s|S)
echo "Swap usages."
free -m | grep "Swap" ;;
*)
echo "Unknown."
esac read -p "Again, your choice:" CHOICE
done cat 用于显示文本文件内容,全部输出
EOF “end of file”,表示文本结束符
sh5.while 脚本练习的更多相关文章
- 使用sh-x调试shell脚本_转
参考:http://blog.chinaunix.net/uid-20564848-id-73502.html 1. 通过sh -x 脚本名 #显示脚本执行过程2.脚本里set -x选项,轻松跟踪调 ...
- Apache执行Python脚本
由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...
- SQL Server镜像自动生成脚本
SQL Server镜像自动生成脚本 镜像的搭建非常繁琐,花了一点时间写了这个脚本,方便大家搭建镜像 执行完这个镜像脚本之后,最好在每台机器都绑定一下hosts文件,不然的话,镜像可能会不work 1 ...
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- 探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密
下面的图片是我使用firefox和chrome浏览百度首页时候记录的http请求 下面是firefox: 下面是chrome: 在浏览百度首页前我都将浏览器的缓存全部清理掉,让这个场景最接近第一次访问 ...
- 第一个shell脚本
打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...
- Java 8 的 Nashorn 脚本引擎教程
本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Goog ...
- 【开源】.Net 动态脚本引擎NScript
开源地址: https://git.oschina.net/chejiangyi/NScript 开源QQ群: .net 开源基础服务 238543768 .Net 动态脚本引擎 NScript ...
- InstallShield 脚本语言学习笔记
InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加. 一.基本语法规则 ...
随机推荐
- CodeForces - 453A Little Pony and Expected Maximum
http://codeforces.com/problemset/problem/453/A 题目大意: 给定一个m面的筛子,求掷n次后,得到的最大的点数的期望 题解 设f[i]表示掷出 <= ...
- 纪念BLives 1.0版本发布
历时两个多月的时间,BLives程序1.0发布,在开发程序期间自己经历了很多,考试,恋爱,学业,自己很纠结 很伤心,有时候很无助,为了让自己有事干,我在考试备考期间去设计程序- -#,虽然程序设计的一 ...
- php 使用函数中遇到的坑之----list
1. list 把数组中的值赋给一些变量 <?php $info = array('coffee', 'brown', 'caffeine'); // 列出所有变量 list($drink, $ ...
- dwarf tower
dwarf tower(dwarf.cpp/c/pas)[问题描述]Vasya在玩一个叫做"Dwarf Tower"的游戏,这个游戏中有n个不同的物品,它们的编号为1到n.现在Va ...
- Dev控件GridView单元格绑定控件
Dev控件GridView单元格绑定控件 //文本按钮 RepositoryItemButtonEdit btnFields = new RepositoryItemButtonEdit();//创建 ...
- vector - vector product
the inner product Givens two vectors \(x,y\in \mathbb{R}^n\), the quantity \(x^\top y\), sometimes c ...
- 基于linux(centos)的svn环境搭建
1. 安装svn yum intall subversion 2. 查看安装位置 rpm -ql subversion 3. 检验svn是否安装成功,查看帮助 svn --help , 看到下图表示成 ...
- gprs/gsm 在linux下的应用
之前有篇随笔整理了一种在裸机下用状态机+超时的机制来操作gprs/gsm,linux下就不需要了,本身有完善的调度机制,在等待的流程中直接sleep就行了. 下面是飞凌OK6410下的 demo, 其 ...
- FSM(状态机)、HFSM(分层状态机)、BT(行为树)的区别
游戏人工智能AI中最常听见的就是这三个词拉: FSM 这个不用说拉,百度一大堆解释, 简单将就是将游戏AI行为分为一个一个的状态,状态与状态之间的过渡通过事件的触发来形成. 比如士兵的行为有“巡逻”, ...
- mybase 用户教程
一.安装.卸载 1.安装 在Mac OS X环境下,可通过打开下载的.dmg文件,再把myBase图标拖到应用程序文件夹即可安装.然后通过双击程序图标运行程序 2.卸载 对于Mac OS X,把myB ...