Shell编程中循环语句

目录

一.echo命令:

二.date:

三.seq:  

四.循环:

1.循环的意义:

2.for循环:

列表循环:

不带列表循环:

3. while循环:

​编辑 while 读取文件内容:

4.until循环:


一.echo命令:

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

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


[root@localhost ky15]#echo -e "12345\b678"
##退格删除前面的字符
1234678
[root@localhost ky15]#echo -e "12345\b\b678"
123678
[root@localhost ky15]#echo -e "12345\b\b\b678"
12678
[root@localhost ky15]#echo -e "12345\b\b\b\b678"
16785
###注意退格键和末尾的字符相关,超过末尾的字符数量 会出bug 了解即可

[root@localhost ky15]#echo -e "12345678\c"
12345678[root@localhost ky15]#echo -e "1234\c5678"
1234[root@localhost ky15]#
###\c 注意 使用在数字中间会把后面内容删除

echo -e "n\n\n\n\n\nw"|fdisk /dev/sdb
#自动硬盘分区

#!/bin/bash
read  -p   "请输入你要分区的设备:"   disk
read  -p   "请输入你要分区的大小:"   num

echo  -e  "n\n\n\n\n${num}\nw\n " | fdisk ${disk}

 

二.date:

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

三.seq:  

[root@localhost data]#seq 1 2 10
#从1 开始 步长为2  到10 为止
1
3
5
7
9

四.循环:

1.循环的意义:

将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件

重复运行次数

  • 循环次数事先已知

  • 循环次数事先未知

常见的循环的命令:for, while, until

2.for循环:

语法结构

  • 列表循环

  • 不带列表循环

  • 类C风格的for循环

列表循环:

for 变量名 in   {list}
do
    command
done
花括号{}和seq在for循环的应用:
for i in {1..50..2} 1-50的奇数


for i in {2..50..2} 1-50的偶数
for i in {10..1}  1-10倒序排列



for i in $(seq 10)  1-10正序排列
for i in $(seq 10 -1 1) 1-10倒序排列
for i in $(seq 1 2 10) 1-10的奇数,中间为步长

不带列表循环:

for 变量名 
do
    command
done

 

#########示例##########

[root@localhost ~]# vim users.txt
 
zhangsan
wangwu
my
qyd
lisi
[root@localhost ~]# vim useradd.sh
 
#!/bin/bash
#批量添加用户
for USER in $(cat /root/users.txt) #也可以使用for USER in `cat /root/users.txt)`
do
  useradd $USER
  echo "123123" | passwd --stdin $USER
done
[root@localhost ~]# bash useradd.sh 

 

 

示例2 

  • 生成八位数的随机密码,取值范围为大小写英文字母和数字

截取字符串${i;n;m}

i是变量名

n是开始取值的下标,从0开始算起

m是取值长度

随机数RANDOM

$RANDOM 随机取数,范围为0--32767之间的整数

$RANDOM % i  取出来的数的范围为 0--(i-1)

 

 字符串的追加方法

  • 变量1+=变量2

  • 变量1=变量1变量2

字符串长度

${ #变量名}

 

[root@localhost ~]# vim passwd.sh
 
#!/bin/bash
#生成8位数密码
##定义密码的取值范围
String="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
 
##循环8次
for ((i=1;i<=8;i++))
do
  ##每次循环随机获取0到字符串长度-1的下标值
  num=$[ RANDOM % ${#String} ]
  ##进行字符串的截取,每次截取1个
  var=${String:num:1}
  ##每次追加生成的密码
  passwd+=$var
done
echo "本次生成的密码为:$passwd"
[root@localhost for]# bash passwd.sh 
本次生成的密码为:zT0pH1Eb
[root@localhost for]# bash passwd.sh 
本次生成的密码为:h2algqgp
 

 

3. while循环:

重复测试某个条件,只要条件成立则反复执行

格式:

while 条件测试操作
do
  命令序列
done
  • 批量添加用户
##################示例##########################
[root@localhost demo]# vim 4.sh
 
#!/bin/ bash
#用户名称以stu开头,按数宁顺序进行编号
#一共添加20个用户,stu1、 stu2 、......、 stu20
#初始密码均设为123456
 
a=1
while [ $a -le 20 ]
do
useradd stu$a -M
echo "123123" | passwd --stdin stu$a
let a++
done
[root@localhost demo]# bash 4.sh 

 while 读取文件内容:

格式

while read 变量名
do 
  
done < 文件名
 
或者
cat 文件名 | while read 变量名
do
 
done
示例 :

将name.txt文件内的内容分别打印出来
[root@localhost demo]# vim 7.sh
 
#!/bin/bash
while read name
do
 echo $name
done < name.txt
 
[root@localhost demo]# bash 7.sh 
zhangsan
wang uw
lisi
zhaoliu

 

4.until循环:

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

until 循环语句的语法结构

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

 

示例:

计算1-50的和

[root@localhost demo]# vim 2.sh
 
#!/bin/bash
a=0
sum=0
until [ $a -gt 50 ]
do
  sum=$[ sum + a ]
  let a++
done
echo "1-50的和为$sum"
[root@localhost demo]# bash 2.sh
1-50的和为1275

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值