shell脚本之循环语句

一 echo命令

echo -n   表示不换行输出

echo -e   表示输出转义符

常用的转义符:

举例 

二 date

查看当前系统时间

-d 你描述的日期,显示指定字符串所描述的时间,而非当前时间

%F 完整日期格式,等价于 %Y-%m-%d

% T 时间(24小时制)(hh:mm:ss)

[root@localhost ~]# date -d '-1 day' +%F 
2021-10-21

[root@localhost ~]# date  +%F 
2021-08-19

[root@localhost ~]# date -d '1 day ' +%F-%T
2021-08-20-23:28:42

[root@localhost mnt]# date -d "-3 day"      前三天
2021年 08月 18日 星期三 11:30:15 CST

[root@localhost mnt]# date -d "+3 day"  后三天
2021年 08月 18日 星期三 11:30:15 CST

[root@localhost data]#date -d '1 day ' +%F'     '%T
2021-10-22     00:45:37

三 日历

[root@localhost data]#cal 2021

查看日历

[root@localhost data]#cal 9 1752

 

四 $RANDOM 取值范围:

0-32767

[root@test1 ~]# echo $[$RANDOM%50]
37
[root@test1 ~]# echo $[$RANDOM%20]
15

 五 seq

[root@localhost data]#seq 1  2  10        #从1 开始 步长为2  到10 为止,输出奇数
1
3
5
7
9
[root@localhost data]#seq  9 -1 1
9
8
7
6
5
4
3
2
1


六 循环的命令:for, while, until

1 for  列表循环

for    变量名       in            {list}

do
    执行内容   若满足规则做什么动作
done

2 不带列表循环

for 变量名 
do
    command
done

3  while

相对于for,需要知道循环次数

我们只知道停止条件,不知道次数,就需要使用while,直到达到条件

while循环 :1、语法结构 2、死循环

while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就跳出循环

实验:1元才是正确答案 

[root@localhost ~]#cat mcb.sh
#!/bin/bash
p=`echo $[ RANDDM%1000+1 ]`
time=0

while true
do
let time++
read -p "请输入你猜测的价格 (1-1000):" h
if [ $h -eq $p ]
then
echo "恭喜你猜中了,你一共猜测了$time次"
exit
elif [ $h -gt $p ]
then
echo "你猜测的价格过高"
else
echo "你猜测的价格过低"
fi
done

 

4 双重循环及跳出死循环

  • break跳出单个循环 break n 数字数字是几代表跳出n层循环

  • continue终止某次循环中的命令,但是不会完全终止命令

  • exit 直接退出脚本

5 until

until 循环与 while 循环类似,while 循环能实现的脚本 until 同样也可以实现,但区别是while 循环在条件为真是继续执行循环,而 until 则是在条件为假时执行循环

until 循环语句的语法结构如下所示

until 条件测试操作
do
          命令序列
done

七 for-实验① 九九乘法表

#!/bin/bash
# j行数   i管列数
for j in  {1..9}
do

        for i in  `seq  $j`
        do


        echo  -e   "${i}x${j}=$[i*j] \c"

        done

echo
done

另一种

#!/bin/bash
for j in {1..9}
do
         for  i in `seq $j`
         do 
         echo  -ne  "$j*$i=$[ $j*$i ]\t"
         done
echo
done

实验② 测试ping 通

#!/bin/bash
for i in   {1..254}
do
{
ping -c2 -W2 192.168.11.$i  &>/dev/null  && echo "$i is online" >> data/hostonline.txt || echo "$i is offline" >> data/hostoffline.txt
} &
done

另一个

[root@localhost ~]# cat mcb8.sh
#!/bin/bash
read -p  "请输入你需要测试的网段,格式为(192.168.11.):" ip 
for i in {1..254}
do
{
ping -c2 -W2 $ip$i  &>/dev/null
         if [ $? -eq 0  ]
         then
         echo "$ip$i is online"
         echo $ip$i >> host.txt
         else
         echo "$ip$i is offline"
         fi
}&
done
wait

实验③  改变颜色

[root@localhost data]# echo -e "\E[1;$[RANDOM%7+31]m 称霸武林 \E[0"


实验④ 求和

#!/bin/bash
sum=0
for i  in  {1..100}
do
sum=$[sum+i] 
done
echo $sum

另一种方法

#!/bin/bash
#by even 2018
sum=0
for i in `seq 1 100`
do
        sum=$[$i+$sum]
done
echo  $sum

另一种

#!/bin/bash
#
i=100
a=1
until [ $i -le 1 ];do  #循环条件 i<=1
a=$(( $a + $i ))
i=$(( $i - 1 ))
done
echo $a

 实验⑤ 改名字

[root@localhost data]# cd /
[root@localhost /]# mkdir data
[root@localhost /]# bash mcb13.sh
bash: mcb13.sh: 没有那个文件或目录
[root@localhost /]# cd
[root@localhost ~]# cd data/
[root@localhost data]# mv mcb13.sh  /data
[root@localhost data]# cd /data/
[root@localhost data]# ls
mcb13.sh
[root@localhost data]# 
[root@localhost data]# ls
mcb13.sh



***************************

[root@localhost ~]# cd data/
[root@localhost data]# mv mcb13.sh  /data
[root@localhost data]# cd /data/
[root@localhost data]# ls
mcb13.sh


**********************************



[root@localhost data]# cat mcb13.sh
#!/bin/bash
for i in `cat /data/name.txt`
do
id $i
if [ $? -eq 0 ];then
echo "用户已存在"
else
useradd $i[root@localhost data]# cat name.txt
马传斌
马传斌2
马传斌3
ABCD
EFGihf
**************************


echo 123 | passwd  --stdin  $i
fi
done
***********************

[root@localhost data]# bash mcb13.sh
id: 马传斌: no such user
useradd:无效的用户名“马传斌”
passwd:未知的用户名 马传斌。
id: 马传斌2: no such user
useradd:无效的用户名“马传斌2”
passwd:未知的用户名 马传斌2。
id: 马传斌3: no such user
useradd:无效的用户名“马传斌3”
passwd:未知的用户名 马传斌3。
id: ABCD: no such user
更改用户 ABCD 的密码 。
passwd:所有的身份验证令牌已经成功更新。
id: EFGihf: no such user
更改用户 EFGihf 的密码 。
passwd:所有的身份验证令牌已经成功更新。

实验⑥ 批量修改文件后缀名

实验⑦ 循环脚本

#!/bin/bash

for i in {1..7}

do

echo "$i"

done

**********
符号意义

实验⑧批量添加用户

#!/bin/bash
b=1

while [ $b -le  20 ]

do

useradd  mcb$b

echo 3721 | passwd  --stdin mcb$b     &>/dev/null

let b++


done

 实验⑨批量删除用户

#!/bin/bash
b=1

while [ $b -le  20 ]

do

userdel  -r   mcb$b

echo 3721 | passwd  --stdin mcb$b     &>/dev/null

let b++


done

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值