脚本编程:

  顺序结构

  选择结构

   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 脚本练习的更多相关文章

  1. 使用sh-x调试shell脚本_转

    参考:http://blog.chinaunix.net/uid-20564848-id-73502.html 1. 通过sh -x 脚本名  #显示脚本执行过程2.脚本里set -x选项,轻松跟踪调 ...

  2. Apache执行Python脚本

    由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...

  3. SQL Server镜像自动生成脚本

    SQL Server镜像自动生成脚本 镜像的搭建非常繁琐,花了一点时间写了这个脚本,方便大家搭建镜像 执行完这个镜像脚本之后,最好在每台机器都绑定一下hosts文件,不然的话,镜像可能会不work 1 ...

  4. 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  5. 探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密

    下面的图片是我使用firefox和chrome浏览百度首页时候记录的http请求 下面是firefox: 下面是chrome: 在浏览百度首页前我都将浏览器的缓存全部清理掉,让这个场景最接近第一次访问 ...

  6. 第一个shell脚本

    打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...

  7. Java 8 的 Nashorn 脚本引擎教程

    本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Goog ...

  8. 【开源】.Net 动态脚本引擎NScript

    开源地址: https://git.oschina.net/chejiangyi/NScript 开源QQ群: .net 开源基础服务  238543768 .Net 动态脚本引擎 NScript   ...

  9. InstallShield 脚本语言学习笔记

    InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加.     一.基本语法规则      ...

随机推荐

  1. struts2.5的配置及其注意事项

    坑爹的apache,官方的jar包提供了一个struts2的运行最小jar包

  2. phylogeny analysis

    Multiple Alignment: MUSCLE ProbCons T-Coffee ClustalW Alignment curation: Gblocks Remove positions w ...

  3. HiShop2.x版本中的上传插件分析,得出所用的模板语言为Underscore.js 1.6.0且自己已修改

    效果: 上传组件非常的酷,但是分析其使用JS写法使用了模板语言的,代码如下: <script type="text/j-template" id="tpl_popb ...

  4. MVC 总结

    以下内容摘自 PHP for Absolute Beginners, Thomas Blom Hansen & Jason Lengstorf The model-view-controlle ...

  5. .NET FRAMEWORK版本:4.0.30319; ASP.NET版本:4.6.118.0

    https://gqqnbig.me/2015/11/23/net-framework%e7%89%88%e6%9c%ac4-0-30319-asp-net%e7%89%88%e6%9c%ac4-6- ...

  6. Linux下Nginx负载 iis问题

    使用以下NGINX配置负载IIS upstream 192.168.119.128{ server 192.168.119.1:8081; server 192.168.119.1:8082; } s ...

  7. 精通css 高级web标准解决方案——可视化格式模型-盒模型

    1-盒模型的两种标准: IE :width 和 height属性 是包括padding和border在内的. w3c:width 和 height 属性,就是单纯的内容的宽高,padding 是内容之 ...

  8. Généralement c'est un mélange qui me devient personnellement

    Parmi mes plus grands problèmes personnels avec maisons de rue conventionnelles est en fait ils sont ...

  9. iBatis.net 类的继承extends和懒加载

    <resultMaps> <resultMap id="FullResultMap" class="t_c_team_member_permission ...

  10. 关于TableView上有一段留白的解决方法

    当cell的类型是plaint类型时 直接设置self.automaticallyAdjustsScrollViewInsets=NO; 还有要注意检查你自己设置的frame是否正确     当cel ...