################for循环语句的结构#############
使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量值用完退出循环。在这里,取值表 称为for语句的执行条件,其中包括多个属性相同的对象、需要预先指定(如通讯录、IP黑名单)
·
语法样式
for 变量名 in 取值列表
do
  命令序列
done
·
#####for循环语句列子####
需求:根据人事部门给出的员工姓名拼音列表,在Linux服务器中添加相应的用户账号,
初始密码均设置为“123456”,其中,员工列表的账户数量不固定,不相同。
·
1.编辑文本
[root@localhost ~]# cd /opt
[root@localhost opt]# vi users.txt
zhang3
li4
wang5
sun6
2.编辑脚本
##创建多个用户
[root@localhost opt]# vi uaddfor.sh
#!/bin/bash
ULIST=$(cat /opt/users.txt)
for UNAME in $ULIST
do
useradd $UNAME
echo "123456" | passwd --stdin $UNAME &>/dev/null
done
·
##删除uaddfor.sh脚本添加的用户
cd opt
vi udelfor.sh
#!/bin/bash
ULIST=$(cat /opt/users.txt)
for UNAME in $ULIST
do
userdel -r $UNAME &>/dev/null
id $UNAME
done
·
##IP地址检查主机状态
[root@localhost opt]# vi ipadds.txt
192.168.10.1 
192.168.10.2
192.168.10.3
192.168.10.4
·
[root@localhost opt]# vi chkhosts.sh 
#!/bin/bash
HLIST=$( cat /opt/ipadds.txt )
for IP in $HLIST
do
ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
if [ $? -eq 0 ]
then
echo "host $IP is up."
else
echo "host $IP is down."
fi
done
[root@localhost opt]# chmod +x chkhosts.sh
[root@localhost opt]# ./chkhosts.sh 
host 192.168.32.1 is down.
host 192.168.32.2 is up.
host 192.168.32.3 is down.
host 192.168.32.11 is up.
·
#############while循环语句的结构###########
for循环语句非常适合列表对象无规则,且列表来源固定的场合,而对于需求控制的循环次数,操作对象按数字顺序的编号,按特定的条件执行重复操作等情况,则更适合使用一种循环语句----while语句。
while语句使用流程:首先判断while后条件测试操作结果,如果条件成立,则执行do......done循环体;返回while后,再次判断条件测试结果,如果条件仍然成立,则继续折行循环体;再次返回while后,判断条件测试结果........如此循环,直到while后的条件测试结果不在成立为止,最后跳到done语句,表示循环结束。
whlie特点:重复测试某个条件,只要条件成立则反复执行
·
语法样式
while 条件测试操作
do
命令序列
done
·
#####while循环语句实例#####
批量添加用户
用户名称以stu开头,按数字顺序进行编号
一共添加20个用户,即stu1、stu2、……、stu20
初始密码均设为123456
·
[root@localhost opt]# vi uaddwhile.sh
#!/bin/bash
PREFIX="stu"
i=1
while [ $i -le 20 ]
do 
useradd ${PREFIX}$i
echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null
let i++
done
[root@localhost opt]# chmod +x uaddwhile.sh 
[root@localhost opt]# ./uaddwhile.sh 
·
###删除用户###
[root@localhost opt]# cd /opt
[root@localhost opt]# vi udelwhile.sh
#!/bin/bash
PERFIX="stu"
i=1
while [ $i -le 20 ]
do 
userdel -r ${PERFIX}$i
let i++
done 
[root@localhost opt]# chmod +x udelwhile.sh 
[root@localhost opt]# ./udelwhile.sh 
·
·
###实例2###
猜商品价格游戏
通过变量RANDOM获得随机数
提示用户猜测并记录次数,猜中后退出循环
·
[root@localhost opt]# vi pricegame.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品的实际价格范围0-999,猜猜看是多少"
while true
do
read -p "请输入你猜猜的价格数目:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜你答对了,实际价格是 $PRICE"
echo "您总共猜对了 $TIMES 次"
exit 0
elif [ $INT -gt $PRICE ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done
·
###解释###
1、while true 是代表无限循环下去
2、$RANDOM是Bash的内部函数,随机取值范围在0 - 32767之间
·
[root@localhost opt]# chmod +x pricegame.sh 
[root@localhost opt]# ./pricegame.sh 
商品的实际价格范围0-999,猜猜看是多少
请输入你猜猜的价格数目:900
太高了!
请输入你猜猜的价格数目:800
太高了!

请输入你猜猜的价格数目:325
恭喜你答对了,实际价格是 325
您总共猜对了 13 次
·
#############case分支语句的结构#############
针对变量的不同取值,分别执行不同的命令序列 
·
###语法样式
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
 ……
)
默认命令序列
esac
·
###case使用特点
·
case行尾必须为单词"in",每一模式必须以")"结束
双分号";;" 表示命令序列结束
模式字符串中,可以用方括号表示已个连续的范围,如"[0-9]";还可以用竖杠符号"|"表示,如"A|B"
最后的"
" 表示默认模式,其中的相当于通配符。
·
###示例1
击键类型识别
提示用户输入一个字符
判断出该字符是字母、数字或者其他字符
·
vi hitkey.sh
#!/bin/bash
read -p "请输入一个字符,并Enter键确认:" KEY
case "$KEY" in
[a-z] | [A-Z])
echo "您输入的是 字母."
;; 
[0-9])
echo "您输入的是 数字."
;;

echo "您输入的是 空格、功能键或者是其他控制字符."
esac
·
[root@localhost opt]# chmod +x hitkey.sh 
[root@localhost opt]# ./hitkey.sh 
请输入一个字符,并Enter键确认:A
您输入的是 字母.
[root@localhost opt]# ./hitkey.sh 
请输入一个字符,并Enter键确认:a
您输入的是 字母.
[root@localhost opt]# ./hitkey.sh 
请输入一个字符,并Enter键确认:1
您输入的是 数字.
[root@localhost opt]# ./hitkey.sh 
请输入一个字符,并Enter键确认:
您输入的是 空格、功能键或者是其他控制字符.

shell 脚本 for,while,case 语句详解及案例的更多相关文章

  1. Shell脚本 /dev/null 2>&1详解

    Shell脚本---- /dev/null 2>&1详解   1.可以将/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. ...

  2. 常见shell脚本测试题 if/case语句

    1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提 ...

  3. Shell脚本———— /dev/null 2>&1详解

    1.可以将/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和 ...

  4. linux shell脚本学习xargs命令使用详解

    作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题 xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处 ...

  5. 【转】MySQL用户管理及SQL语句详解

    [转]MySQL用户管理及SQL语句详解 1.1 MySQL用户管理 1.1.1 用户的定义 用户名+主机域 mysql> select user,host,password from mysq ...

  6. shell脚本编程之for语句、if语句使用介绍

    介绍了shell脚本编程之for语句.if语句的使用方法. 上部: 面向过程: 顺序执行 选择执行: if, case 循环执行: for, while, until 一.for语句 格式:      ...

  7. loadrunner 脚本优化-关联函数web_reg_save_param()函数详解

    脚本优化-关联函数web_reg_save_param()函数详解   by:授客 QQ:1033553122 Insert->New Step,打开Add Step对话框 选择函数web_re ...

  8. gvoory脚本中关于HttpClient使用详解实例

    一.gvoory脚本中关于HttpClient使用详解实例 HttpClient:是一个接口 首先需要先创建一个DefaultHttpClient的实例 HttpClient httpClient=n ...

  9. shell脚本中select循环语句用法

    shell脚本中select循环语句 1. 脚本中select的语法格式 select VAR in LIST do command1 command2 ... ... commandN done s ...

随机推荐

  1. JAVA 统计字符串中中文,英文,数字,空格,特殊字符的个数

    引言 可以根据各种字符在Unicode字符编码表中的区间来进行判断,如数字为'0'~'9'之间,英文字母为'a'~'z'或'A'~'Z'等,Java判断一个字符串是否有中文是利用Unicode编码来判 ...

  2. linux bash 的基础语法

    示例均来自网络,附带有原始链接地址,自己练习整理发出,均测试可用 linux shell 基本语法 - 周学伟 - 博客园 https://www.cnblogs.com/zxouxuewei/p/6 ...

  3. python3.0安装django2.0、xadmin

    1.操作环境 Windows10.python3.8 2.安装django2.0 pip install django==2.0 x   1 pip install django==2.0 3.安装相 ...

  4. win10自动休眠解决方法

    win10使用外接显示器时,总是过2分钟自动睡眠. 这是系统无人值守时睡眠时间的设定,默认是两分钟. 解决方法: 1.运行注册表管理器,win+r ,输入regedit.exe 2.定位到HKEY_L ...

  5. Ext.create使用(下)

    本文介绍第三种使用方法: //通过类的引用实例化一个类 var w1 = Ext.create(Ext.window.Window, {//类的引用 title: '窗体', html:'<fo ...

  6. linux ssh免密

    1.ssh-keygen -t rsa 生产密钥 2.ssh-copy-id 192.168.44.10 发布密钥  

  7. Fundebug:JavaScript插件支持错误采样

    Fundebug的付费套餐主要是根据错误事件数制定的,这是因为每一个发送到我们服务器的事件,都会消耗一定的CPU.内存.磁盘以及带宽资源,尤其当错误事件数非常大时,会对我们的计算资源造成很大压力. 如 ...

  8. vue 开发系列(十) VUE 作用域插槽

    使用场景 官方解释,有时让插槽内容能够访问子组件中才有的数据是很有用的.比如我们在使用ant-design-vue 的表格控件时. <a-table-column title="注释& ...

  9. 三层架构介绍和MVC设计模型介绍

    springmvc是什么? Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层 进行职责解耦,基于请 ...

  10. 网关地址和网关IP是什么,他们有什么关系?

    2019-12-19  新用户541...  转自 小糊涂大神 修改   通常情况下,一台终端上网必须设置IP地址.子网掩码.网关IP地址,终端IP地址与网关IP属于同一个网段,网关IP是终端访问外网 ...