shell循环

1、基本格式

for 变量名称(注意是名称不是变量$等) [ in 名称范围 ] (可以不写)

do

执行内容 若满足循环则做什么动作

done for循环结束标志

for i in $(cat /opt/users.txt);

do

useradd $i

echo 123456 | passwd --stdin $i

don

类C语言格式

for (( 表达式1 ;表达式2;表达式3 ))

do

执行内容 若满足循环则做什么动作

done for循环结束标志

表达式1:定义变量并赋值

表达式2:决定是否循环

表达式3:决定循环变量如何改变,决定循环什么时候结束

while循环

用于不知道循环次数,需要主动结束循环或达到条件结束循环。

1、基本格式

while [ 判断条件] 使用while循环满足条件执行do,不满足不执行

do

执行动作 while循环执行动作

done while循环结束标志

死循环语句

while [1 -eq 1] 判断条件写一个永久为真的条件

do 一直执行do内的命令

done

while true 直接写判断条件为真

do 一直执行do内的命令

done

while : 判断条件为冒号也表示死循环

do 一直执行do内的命令

done

until循环

1.基本格式

until循环通常用于当某个条件不满足时执行一些操作,比如等待某个进程退出、等待某个文件被创建等等

格式:

until [ 条件测试操作 ]

do

判断式/命令序列

done

三、跳出循环

1、continue跳出循环

表示满足continue条件时跳出循环,但是不影响后续循环执行

break跳出循环

在某个循环中遇到break直接结束此次循环,但是不影响外边嵌套的循环。

break [数字] 结束数字中的几次循环,若为2则结束自己所在循环和外边嵌套的一层循环,若为3则结束自己所在循环和外边嵌套的2层循环

1、循环打印9*9乘法表

思路:

①第一步for循环打印一行9个*号

②第二步再添加一个for循环打印一个9行9列的*号正方形

②第三步将*号正方形斜砍一般形成9*9乘法表的基本格式

③第四步将*号9*9乘法表格式用乘法算式替换

9*9乘法表

第一步:

vim 99.sh #创建99.sh脚本

脚本内容:

#!/bin/bash

for i in {1..9} #for循环9次从i=1开始

do

echo -n "." #每循环一次打印一个. echo -n参数表示不换行

done #此for循环语句结束

bash 99.sh #调用shell执行脚本

第二步:

vim 99.sh #编辑99.sh脚本

脚本内容:

#!/bin/bash

for i in {1..9} #添加打印列循环,循环9次从i=1开始

do #j循环时做do中的内容

for j in {1..9} #第一步for循环内容不变

do

echo -n "."

done

echo #列循环每循环一次打印一行空格进行换行

done #列循环for语句结束标志

seq 是一个 Linux/Unix 命令,用于生成一个序列(sequence)并打印出来。

第三步:

vim 99.sh #编辑99.sh脚本

脚本内容:

#!/bin/bash

for j in {1..9} #列循环内容不变

do

for i in `seq $j` #修改行循环j的取值范围为展开变量j,即当j=1时i取值只有1,所以循环一次。当

j=2时,i取值为1和2,所以i=1和i=2各循环一次,循环2次。以此类推到j=9

do

echo -n "*"

done

echo

done

第四步:

vim 99.sh #编辑99.sh脚本

脚本内容:

#!/bin/bash

for j in {1..9} #列循环内容不变

do

for i in `seq $j`

do

echo -ne "$j*$i=$[ $j*$i ]\t" #行输出内容修改为9*9算式和结果。$[ ]表示计算里面的正整数结

果,echo -e参数表示调用转义符,\t表示制表符即循环时输出一个tab键

done

echo

done

循环ping测试某个网段网络连通性

需求:测试用户输入的某个32位网段是否可以ping通,且若可以ping通将此ip输出到文件host.txt中。

思路:

①第一步读取用户输入的32位网段。

②使用for循环生成用户输入网段的所有ip。

③使用ping命令在循环中测试用户输入网段内所有ip,注意指定ping包个数和超时结束时间,否则一直ping。

④将循环检查网络连通性放入后台执行。

while死循环实现猜数字游戏

需求:生成随机1-100的价格给用户猜测直到猜对结束游戏,并统计用户猜对猜了几次。

思路:

①第一步生成一个随机1-100数字

②第二步使用while循环写一个死循环直到用户猜对才结束循环

③在执行循环的过程中统计循环执行次数并输出

vim game.sh #创建脚本game.sh

脚本内容:

#!/bin/bash

num=`echo $[ RANDOM%100+1 ]` # $[RANDOM]是一个0-32767的随机数,%100+1除100取余+1表示生成0-100随机数

time=0 #定义猜对次数变量time初始值为0

while true #生成while死循环

do #循环动作为do内的内容

let time++ #每循环一次time变量自加1

read -p "请输入您猜测的数字,范围(1-100):" user #读取用户输入的内容为变量user

if [ $user -eq $num ] #条件判断分支1,如果用户输入等于随机生成执行then动作

then

echo "您猜对了,您一共猜测了$time次" #if分支1条件成立执行输出

break #if分支1条件成立则结束本次循环

elif [ $user -gt $num ] #条件判断分支2,如果用户输入大于随机生成执行本次then动作

then

echo "您猜大了,请往小猜" #条件判断分支2成立提示用户猜大了

elif [ $user -lt $num ] #条件判断分支3,如果用户输入小于随机生成执行本次then动作

then

echo "您猜小了,请往大猜" #条件判断分支3成立提示用户猜小了

fi #if语句结束

done

数字累加脚本(1-100)

需求:编写脚本实现计算从1加到100的值

思路:

①累加需要用到循环,已知循环次数时使用for循环

②也可以使用while循环达到累加条件时结束循环

vim sum.sh #创建sum.sh脚本

脚本内容:

sum=0 #定义变量sum初始值为0

for i in {1..100} #for循环 i取值从1到100

do

sum=$[ i+sum ]

#let sum=$i+$sum #每次循环内容计算变量i+sum的值赋值给sum,二选一

done #for语句结束标志

echo "1-100累加值为:$sum" #循环结束后输出内容

常用转义字符

echo -n 表示不换行输出

echo -e 输出转义字符,将转义后的内容输出到屏幕上

常用的转义字符如下:

\b 转义后相当于按退格键(backspace),但前提是"\b"后面存在字符;"\b"表示删除前一个字符,"\b\b"表示删除前两个字符。

\c 不换行输出,在"\c"后面不存在字符的情况下,作用相当于 echo -n; 但是当"\c"后面仍然存在字符时,"\c"后面的字符将不会被输出。

\n 换行,被输出的字符从"\n"处开始另起一行。

\f 换行,但是换行后的新行的开头位置连接着上一行的行尾;

\v 与\f相同;

\t 转以后表示插入tab,即横向制表符;

\r 光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符;但是当"\r"后面不存在任何字符时,"\r"前面的字符不会被覆盖

\\ 表示插入"\"本身;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值