Linux之shell脚本的循环

发布时间 2023-08-14 11:17:27作者: 德国南部之星

一、循环语句

1.1for

help for 帮助文档

for i in a b c;do echo hello;done
[root@localhost data]#for i in a b c;do echo hello;done
hello
hello
hello



for i in a b c;do echo $i;done
[root@localhost data]#for i in a b c;do echo $i;done
a
b
c



[root@localhost data]#for i in {1..10};do echo $i;done
1
2
3
4
5
6
7
8
9
10

#求1-100的和

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

[root@localhost data]#bash for.sh
55
[root@localhost data]#bash -x  for.sh
+ sum=0
+ for i in '{1..10}'
+ sum=1
+ for i in '{1..10}'
+ sum=3
+ for i in '{1..10}'
+ sum=6
+ for i in '{1..10}'
+ sum=10
+ for i in '{1..10}'
+ sum=15
+ for i in '{1..10}'
+ sum=21
+ for i in '{1..10}'
+ sum=28
+ for i in '{1..10}'
+ sum=36
+ for i in '{1..10}'
+ sum=45
+ for i in '{1..10}'
+ sum=55
+ echo 55
55


  

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



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


#1-10的奇数
for i in {1..10..2}
#1-100的偶数
for i in {0..10..2}
[root@localhost data]#for i in {1..10..2};do echo $i;done
1
3
5
7
9
[root@localhost data]#for i in {0..10..2};do echo $i;done
0
2
4
6
8
10


#1-10的奇数
for i in `seq 1 2 10`
#1-100的偶数
for i in `seq 0 2 10`
[root@localhost data]#for i in `seq 1 2 10`;do echo $i;done
1
3
5
7
9
[root@localhost data]#for i in `seq 0 2 10`;do echo $i;done
0
2
4
6
8
10




#类C语言风格求1-100的和
#!/bin/bash
sum=0
for ((i=0;i<=100;i++))
do
sum=$[i+sum]
done
echo $sum



#九九乘法表

#!/bin/bash
for i in {1..9}
do
echo -e "*\c"
done
[root@localhost data]#bash for.sh
*********[root@localhost data]#



#!/bin/bash
for j in {1..9}
do 
  for i in {1..9}
  do
  echo -e "*\c"
  done
echo
done
[root@localhost data]#bash for.sh
*********
*********
*********
*********
*********
*********
*********
*********
*********



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

[root@localhost data]#bash for.sh
*
**
***
****
*****
******
*******
********
*********



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

[root@localhost data]#bash for.sh
1*1=1	
1*2=2	2*2=4	
1*3=3	2*3=6	3*3=9	
1*4=4	2*4=8	3*4=12	4*4=16	
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81	 




[root@localhost opt]#touch file{1..10}.txt
[root@localhost opt]#for i in * ;do echo $i ;done
file10.txt
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
file7.txt
file8.txt
file9.txt



#批量修改名字格式
[root@localhost /]#cd /data
[root@localhost data]#touch file{1..10}.sh
[root@localhost data]#ls
file10.sh  file1.sh  file2.sh  file3.sh  file4.sh  
file5.sh   file6.sh  file7.sh  file8.sh  file9.sh
[root@localhost data]#cd /opt
[root@localhost opt]#vim gm.sh
#!/bin/bash
cd /data

for i in *
do
zimu=`echo $i|awk -F'[0-9]+' '{print $1}' `
num=`echo $i|grep -Eo '[0-9]+'`
mv $i  ${num}${zimu}.jpg
done

[root@localhost opt]#bash gm.sh
[root@localhost opt]#cd /data
[root@localhost data]#ls
10file.jpg  2file.jpg  4file.jpg  6file.jpg  8file.jpg
1file.jpg   3file.jpg  5file.jpg  7file.jpg  9file.jpg




#批量添加用户
#用户名存放在user.txt文件中,每行一个
#初始密码均为123456
[root@localhost opt]#cd /data
[root@localhost data]#vim user.txt


[root@localhost opt]#vim useradd.sh

#!/bin/bash

for i in `cat /data/user.txt`
do
useradd $i
echo 123456|passwd $i  --stdin
done


[root@localhost opt]#bash useradd.sh
useradd:用户“zhangsan”已存在
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
useradd:用户“lisi”已存在
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
useradd:用户“wangwu”已存在
更改用户 wangwu 的密码 。
passwd:所有的身份验证令牌已经成功更新。
useradd:用户“zhaoqi”已存在
更改用户 zhaoqi 的密码 。
passwd:所有的身份验证令牌已经成功更新。



#添加10个用户
[root@localhost opt]#vim useradd.sh
#!/bin/bash

for i in {1..10}
do
useradd test${i}
echo 123456|passwd $i  --stdin
done

[root@localhost opt]#bash useradd.sh
passwd:未知的用户名 1。
passwd:未知的用户名 2。
passwd:未知的用户名 3。
passwd:未知的用户名 4。
passwd:未知的用户名 5。
passwd:未知的用户名 6。
passwd:未知的用户名 7。
passwd:未知的用户名 8。
passwd:未知的用户名 9。
passwd:未知的用户名 10。


#根据ip地址检查主机状态
#ip地址存放在ipadds.txt文件中,每行一个
#使用ping



       

1.2

1.3

二、shell函数

三、shell数组