shell脚本-循环语句for 、while、until

一.echo 命令

echo -n   表示不换行输出
echo -e   表示输出转义符

常用的转义符

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

转义符的使用:

\t 

\b

\c

\n

\r

标准输出的一些小用法

显示奇数:

显示偶数:

删除字符:

截取字符:

增加字符串:

eval 命令  协助bash做多次运算

二.date 命令

date 查看当前系统时间

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

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

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

查看日历

用法:
 cal  [选项]  [[[日] 月] 年]

 

三. for循环

  • 用法:

    • 读取不同的变量值,用来逐个执行同一组命令

    • for循环经常使用在已经知道要进行多少次循环的场景

  • 格式:

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

里面的 i 可以调用也可以不调用

操作:

① 打印 1-10

② 给文件批量改后缀

③ 给文件批量改名

模拟环境:

通过脚本可以批量改变格式

修改后的文件格式

#!/bin/bash

for i in `ls /data02`
do
a=`echo $i |cut -d"_" -f1`
b=`echo $i |cut -d"_" -f2`

mv  /data02/$i   /data02/${b}_${a}.jpg

done

④ 求1-100的和

#!/bin/bash

sum=0
for i in {1..100}
do
sum=$[i+sum]

done

echo "求和结果为$sum"

⑤ 求奇数和和偶数和

#!/bin/bash

sum1=0
for i in {1..100..2}
do
sum1=$[i+sum1]
done

echo "奇数和为$sum1"


sum2=0
for i in {0..100..2}
do
let sum2+=$i
done

echo "偶数和为$sum2"

⑥ 批量添加用户

因为刚才已经创建了 name.txt 里面的用户,所以无法再次创建

#!/bin/bash
for i in `cat /data02/name.txt`
do
id $i &>> /dev/null
if [ $? -eq 0 ]
then
echo "${i}用户已存在"
else
useradd $i
echo 123 |passwd --stdin $i &>> /dev/null
fi


done

⑦ ping 

#!/bin/bash
{
for i in {1..254}
do
ping -c2  -W2  192.168.44.$i &>>/dev/null
if [ $? -eq 0 ]
then
echo "$i is online" >> /data02/on.txt
else
echo "$i is offline" >> /data02/off.txt
fi
done
}&

⑧ 打印九九乘法表

#!/bin/bash

for ((i=1;i<=9;i++))
do
  for ((j=1;j<=i;j++))
  do
   echo -e "${i}x${j}=$[i*j] \t\c"
  done
echo 
done

⑨ 倒过来打印

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

四. while 循环语句

  • 用法:

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

死循环:

while 写一个永远为真的条件

while true

while  :

操作:

① 累加求和

#!/bin/bash

i=0
sum=0
while [  $i -le 100 ]
do

sum=$[i+sum]

let i++

done

echo "求得和为$sum" 

② 批量建用户

③ 批量删除用户

#!/bin/bash

x=1
while [ $x -le 20 ]
do
userdel -r  stu$x

let x++
done

④ 猜商品的价格

#!/bin/bash

p=`echo $[RANDOM%1000+1]`
time=0


while :
do
read -p "请输入商品的价格(1-1000):" h
let  time++
if [ $p -eq $h ]
then
echo "恭喜您猜中了,商品的价格是${h};您一共猜了${time}次"
exit
elif [ $p -gt $h -a $h -le 1000 -a $h -gt 0 ]
then
echo "您猜的价格过低"
elif [ $p -lt $h -a $h -le 1000 ]
then
echo "您猜的价格过高"
else
echo "输入有误,请重新输入"
fi
done

五.until 循环语句

  • 用法: 重复测试某个条件,只要条件不成立则反复执行

  • 格式:

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

操作

① 求1-100的和

#!/bin/bash
sum=0
i=0
until [ $i -gt 100 ]
do
 sum=$[sum+i]
 let i++
done
echo "{1..100}的和:" $sum

② 登录用户 xyl  使用 root 发消息给 xyl

root 发送

xyl 能收到

#!/bin/bash
#输出参数是否满足条件
if [ $# -lt 2 ]
then
echo "位置参数不足,需要在脚本后面添加用户名和发送的信息"
exit 1
fi

#判断用户是否存在
if grep -q "^$1" /etc/passwd
then
:
else
echo "用户存在"
exit 1
fi

#判断用户是否在线
until who |grep $1 &>>/dev/null
do
echo "用户不在线"
sleep 5
done

echo  $2 |write xyl

六.continue 和 break 和 exit

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

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

  • exit 直接退出脚本

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值