循环
常见的循环的命令:for, while, until
格式一:
for 变量名 in 列表;do
循环体
done
格式二:
for ((控制变量初始化;条件判断表达式;控制变量的修正表达式))
do
循环体
done
范例:
1 打印99乘法表
[root@centos8|8|scripts]#bash 99.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
1*10=10 2*10=20 3*10=30 4*10=40 5*10=50 6*10=60 7*10=70 8*10=80 9*10=90 10*10=100
[root@centos8|9|scripts]#cat 99.sh
#/bin/bash
for i in {
1..10} ;do
for j in `seq $i`;do
echo -e "${j}*${i}=$[i*j]\t\c"
done
echo
done
[root@centos8|11|scripts]#bash 992.sh
1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
[root@centos8|12|scripts]#cat 992.sh
#/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
2 把data/test下的文件改为以bak结尾
[root@centos8|45|test]#ls
10.log 1.log 2.log 3.log 4.log 5.log 6.log 7.log 8.log 9.log
10.mp 1.mp 2.mp 3.mp 4.mp 5.mp 6.mp 7.mp 8.mp 9.mp
10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
[root@centos8|50|scripts]#bash for_rename.bak
[root@centos8|52|scripts]#ls /data/test/
10.bak 1.bak 2.bak 3.bak 4.bak 5.bak 6.bak 7.bak 8.bak 9.bak
[root@centos8|53|scripts]#cat for_rename.bak
#/bin/bash
DIR=/data/test
cd $DIR
for FILE in *;do
PRE=`echo $FILE |sed -nr 's/(.*)\.([^.]+)$/\1/p' `
mv $FILE $PRE.bak
done
3 要求将目录YYYY-MM-DD/中所有文件,移动到YYYY-MM/DD/下
#1 yyyy-mm-dd10.sh 创建YYYY-MM-DD,当前日期一年前365天到目前共365个目录,里面有10个文
件,$RANDOM.log
[root@centos8|82|data]#cat scripts/YYMMDD.sh
#bin/bash
for i in {
1..365};do
DIR=`date -d "-$i day" +%F`
mkdir $DIR
cd $DIR
for n in {
1..10};do
touch $RANDOM.log
done
cd ..
done
2 移动到YYYY-MM/DD/下
[root@centos8|91|data]#cat 123.sh
#bin/bash
DIR=/data
cd $DIR
for DIR2 in * ;do
PDIR=`echo $DIR2 | cut -d"-" -f1,2`
SUBDIR=`echo $DIR2 | cut -d"-" -f3`
[ -d $PDIR/$SUBDIR ] || mkdir -p $PDIR/$SUBDIR $> /dev/null
mv $DIR2/* $PDIR/$SUBDIR
done
```bash
[root@centos8|97|data]#bash 111.sh
5050
[root@centos8|98|data]#cat 111.sh
#/bin/bash
sum=0
for ((i=1;i<=100;i++));
do
let sum+=i
done
echo $sum
判断/var/目录下所有文件的类型
[root@centos8|108|data]#cat 333.sh
#/bin/bash
cd /var
for FILE in * ;
do
if [ -f $FILE ];
then
echo "$FILE 是普通文件";
elif [ -d $FILE ];
then
echo "$FILE 是目录文件";
elif [ -h $FILE ];
then
echo "$FILE 是链接文件";
else
echo "为其他文件";
fi
done
2、添加10个用户user1-user10,密码为8位随机字符
[root@centos8|116|data]#cat user.sh
#bin/bash
USER=`echo user{
1..10}`
for NAME in $USER ;do
useradd $NAME
PASS=`cat /dev/urandom | tr -dc '[[:alnum:]]' | head -c8`
echo $PASS | passwd --stdin &> /dev/null
passwd -e $NAME &> /dev/null
echo $NAME:$PASS >> /root/user.txt
echo $NAME 已经创建好
done
3、/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件,以K开头的输出为文件加stop,以S开头的输出为文件名加start,如K34filename stop S66filename start
[root@centos8|133|data]#cat 44.sh
#/bin/bash
cd /etc/rc.d/rc3.d
for FILE in * ;
do
[[ "$FILE" =~ ^K. ]]&& echo "$FILE stop"
[[ "$FILE" =~ ^S. ]]&& echo "$FILE start"
done
4、编写脚本,提示输入正整数n的值,计算1+2+…+n的总和
[root@centos8|145|data]#cat 6.sh
#/bin/bash
read -p "请输入一个数字" NUM
sum=0
NUMBER=`seq $NUM`
for i in $NUMBER ;do
let sum+=$i;
done
echo $sum
5、计算100以内所有能被3整除的整数之和
[root@centos8|148|data]#bash 2.sh
1683
[root@centos8|149|data]#cat 2.sh
#/bin/bash
sum=0
for i in {
3..100..3};do
let sum+=$i
done
echo $sum
6、编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态
[root@centos8|158|data]#bash 4.sh
请输入一个ip地址www.baidu.com
在线
[root@centos8|159|data]#cat 4.sh
#/bin/bash
read -p "请输入一个ip地址" IP
ping -c1 -W1 $IP &> /dev/null && echo "在线" || echo "不在线"
8、在/testdir目录下创建10个html文件,文件名格式为数字N(从1到10)加随机8个字母,如:
1AbCdeFgH.html
[root@centos8|166|data]#bash 8.sh
文件已经创建好
[root@centos8|167|data]#ls /testdir/
10.html 1.html 2.html 3.html 4.html 5.html 6.html 7.html 8.html 9.html
[root@centos8|168|data]#cat 8.sh
#/bin/bash
cd /testdir
RAM=`cat /dev/urandom | tr -dc [[:alpha:]] | head -c8`
for (( i=1;i<=10;i++ ));do
touch ${i}${RAN}.html
done
echo "文件已经创建好"
9、打印等腰三角形
[root@centos8|211|data]#bash 232.sh
*
***
*****
*******
*********
***********
*************
***************
*****************
[root@centos8|212|data]#cat 232.sh
#!/bin/bash
for ((i=1;i<=9;i++))
do
for((j=9;j>i;j--))
do
echo -n " "
done