Shell脚本循环语句(for、while)

一.echo命令和date命令

echo命令:

echo 换行
echo -n 表示不换行输出
echo -e 输出转义字符,将转义后的内容输出到屏幕上

[root@qiaozhi ~]# echo -e "123456"
123456


[root@qiaozhi ~]# echo -n "123456"
123456[root@qiaozhi ~]# 


[root@qiaozhi ~]# echo

[root@qiaozhi ~]# 

选项含义
\n输出换行
\r光标移至行首,并且不换行
\s当前shell的名称,如bash
\t插入Tab键
\f换行,但光标仍停留在原处
\ \表示插入"\"本身
\b表示退格 不显示钱一个字符
\c抑制更多的输出或不换行

date命令:

date查看当前系统时间:

  • -d 你描述的日期,显示指定字符串所描述的时间,而非当前时间
  • %F 完整日期格式,等价于 %Y-%m-%d
  • % T 时间(24小时制)(hh:mm:ss)
[root@qiaozhi ~]# date -d "-3 day"
20211024日 星期日 14:28:27 CST
[root@qiaozhi ~]# date -d "+3 day"
20211030日 星期六 14:28:37 CST
[root@qiaozhi ~]# date -d "+3 day" +%F
2021-10-30
[root@qiaozhi ~]# date -d "+3 day" +%T
14:29:27
查看日历QAQ
[root@qiaozhi ~]# cal 2021
                               2021                               

        一月                   二月                   三月        
日 一 二 三 四 五 六   日 一 二 三 四 五 六   日 一 二 三 四 五 六
                1  2       1  2  3  4  5  6       1  2  3  4  5  6
 3  4  5  6  7  8  9    7  8  9 10 11 12 13    7  8  9 10 11 12 13
10 11 12 13 14 15 16   14 15 16 17 18 19 20   14 15 16 17 18 19 20
17 18 19 20 21 22 23   21 22 23 24 25 26 27   21 22 23 24 25 26 27
24 25 26 27 28 29 30   28                     28 29 30 31
31
        四月                   五月                   六月        
日 一 二 三 四 五 六   日 一 二 三 四 五 六   日 一 二 三 四 五 六
             1  2  3                      1          1  2  3  4  5
 4  5  6  7  8  9 10    2  3  4  5  6  7  8    6  7  8  9 10 11 12
11 12 13 14 15 16 17    9 10 11 12 13 14 15   13 14 15 16 17 18 19
18 19 20 21 22 23 24   16 17 18 19 20 21 22   20 21 22 23 24 25 26
25 26 27 28 29 30      23 24 25 26 27 28 29   27 28 29 30
                       30 31
        七月                   八月                   九月        
日 一 二 三 四 五 六   日 一 二 三 四 五 六   日 一 二 三 四 五 六
             1  2  3    1  2  3  4  5  6  7             1  2  3  4
 4  5  6  7  8  9 10    8  9 10 11 12 13 14    5  6  7  8  9 10 11
11 12 13 14 15 16 17   15 16 17 18 19 20 21   12 13 14 15 16 17 18
18 19 20 21 22 23 24   22 23 24 25 26 27 28   19 20 21 22 23 24 25
25 26 27 28 29 30 31   29 30 31               26 27 28 29 30

        十月                  十一月                 十二月       
日 一 二 三 四 五 六   日 一 二 三 四 五 六   日 一 二 三 四 五 六
                1  2       1  2  3  4  5  6             1  2  3  4
 3  4  5  6  7  8  9    7  8  9 10 11 12 13    5  6  7  8  9 10 11
10 11 12 13 14 15 16   14 15 16 17 18 19 20   12 13 14 15 16 17 18
17 18 19 20 21 22 23   21 22 23 24 25 26 27   19 20 21 22 23 24 25
24 25 26 27 28 29 30   28 29 30               26 27 28 29 30 31
31

二.for循环语句

在这里插入图片描述

执行机制:
依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束。

for  变量名  in  取值列表
do
	命令序列
done

例子:

#!/bin/bash\
for i in {1..10}
do
echo $i
done


[root@qiaozhi ky15]# bash ss.sh 
1
2
3
4
5
6
7
8
9
10

求从1加到100的和

#!/bin/bash
sum=0
for i in {1..100}
do
sum=$[sum+i]
done
echo "求和结果:$sum"


[root@qiaozhi ky15]# bash qiuhe.sh 
求和结果:5050

ping主机测试

#/bin/bash
for i in 192.168.32.{1..5}
do
ping -c 3 $i
if [ $? -eq  0 ]
then
echo "该主机在线"
else
echo "该主机不在线"
fi
done



[root@qiaozhi ky15]# bash ping.sh 
PING 192.168.32.1 (192.168.32.1) 56(84) bytes of data.
64 bytes from 192.168.32.1: icmp_seq=1 ttl=128 time=0.231 ms
64 bytes from 192.168.32.1: icmp_seq=2 ttl=128 time=0.310 ms
64 bytes from 192.168.32.1: icmp_seq=3 ttl=128 time=0.312 ms

--- 192.168.32.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 0.231/0.284/0.312/0.040 ms
该主机在线
PING 192.168.32.2 (192.168.32.2) 56(84) bytes of data.
64 bytes from 192.168.32.2: icmp_seq=1 ttl=128 time=0.204 ms
64 bytes from 192.168.32.2: icmp_seq=2 ttl=128 time=0.285 ms
64 bytes from 192.168.32.2: icmp_seq=3 ttl=128 time=0.124 ms

--- 192.168.32.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 0.124/0.204/0.285/0.066 ms
该主机在线
PING 192.168.32.3 (192.168.32.3) 56(84) bytes of data.
From 192.168.32.96 icmp_seq=1 Destination Host Unreachable
From 192.168.32.96 icmp_seq=2 Destination Host Unreachable
From 192.168.32.96 icmp_seq=3 Destination Host Unreachable

--- 192.168.32.3 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2004ms
pipe 3
该主机不在线
PING 192.168.32.4 (192.168.32.4) 56(84) bytes of data.
From 192.168.32.96 icmp_seq=1 Destination Host Unreachable
From 192.168.32.96 icmp_seq=2 Destination Host Unreachable
From 192.168.32.96 icmp_seq=3 Destination Host Unreachable

--- 192.168.32.4 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2003ms
pipe 3
该主机不在线
PING 192.168.32.5 (192.168.32.5) 56(84) bytes of data.
From 192.168.32.96 icmp_seq=1 Destination Host Unreachable
From 192.168.32.96 icmp_seq=2 Destination Host Unreachable
From 192.168.32.96 icmp_seq=3 Destination Host Unreachable

--- 192.168.32.5 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2009ms
pipe 3
该主机不在线

批量添加用户并修改密码

在这里#!/bin/bash
for i in {1..6}
do
echo why${i}|xargs -n1 useradd
echo "123123"|passwd --stdin why${i}
done




[root@qiaozhi ky15]# bash yonghu.sh 
更改用户 why1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 why2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 why3 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 why4 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 why5 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 why6 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@qiaozhi ky15]# cd /home/
[root@qiaozhi home]# ls
kehuailunnade  why1  why2  why3  why4  why5  why6

三.whlie循环语句

在这里插入图片描述

  • 重复测试某个条件,只要条件成立则反复执行
  • 常在不知道范围的时候成立
格式:
while 条件测试操作
do
	命令序列
done

例子:猜数字

#!/bin/bash
num=`echo $[RANDOM%1000+1]`
time=0
while true
do
read -p "请输入商品价格(1-1000):" a
let time++
if [ $num -eq $a ]
then
echo "恭喜你猜对了"
echo "$time 次"
exit 1
elif [ $num -lt $a ]
then
echo "您猜的价格高了"
else
echo "您猜的价格低了"
fi
done


[root@localhost why]# bash while.sh 
请输入商品价格(1-1000):500
您猜的价格低了
请输入商品价格(1-1000):700
您猜的价格高了
请输入商品价格(1-1000):600
您猜的价格高了
请输入商品价格(1-1000):550
您猜的价格低了
请输入商品价格(1-1000):560
您猜的价格高了
请输入商品价格(1-1000):555
您猜的价格高了
请输入商品价格(1-1000):554
您猜的价格高了
请输入商品价格(1-1000):553
您猜的价格高了
请输入商品价格(1-1000):552
恭喜你猜对了
9
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值